2011-12-01 67 views
9

JPA是否支持將單個值映射到標量數據類型?例如,在下面的查詢使用JPA檢索單個值?

SELECT COUNT(*) AS NUM FROM EMPLOYEES 

映射NUM一些變量

int numerOfEmployees 

或做我必須使用JDBC這樣的使用情況?

回答

14

是的,你可以返回標量類型從JPQL查詢

long num = ((Number)em.createQuery("select count(e) from Employee e") 
        .getSingleResult()).longValue(); 

以及來自原生SQL查詢:

long num = ((Number)em.createNativeQuery("select count(*) from Employees") 
        .getSingleResult()).longValue(); 

注意,在某些情況下導致類型可能取決於數據庫,即在它可以是類似於BigDecimal

+0

Doh,謝謝。沒有理解這是可能的文檔:http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#createNativeQuery(java.lang.String)[請注意,我必須使用對象類型,並使用它的intValue()來使你的例子工作。] –

+0

我更新瞭解決方案使用'(Number)... longValue()'這是一個超類型'BigInteger',我不確定是否存在對於這種情況,任何不返回'Number'子類型的DB /驅動程序,但原始答案中的'(long)'強制「永不」爲我工作。 (我也懷疑你是否可以指定'Number.class'作爲類型映射只是爲了確保(Double.class似乎不工作:http://stackoverflow.com/questions/8959771/jpql-native-query-using-相加和計數) – eckes