2011-12-01 18 views
9

¿Hay alguna ayuda de JPA para asignar valores únicos a tipos de datos escalares? Por ejemplo, para asignar NUM en la siguiente consultaRecuperando valor único usando JPA?

SELECT COUNT(*) AS NUM FROM EMPLOYEES 

a alguna variable

int numerOfEmployees 

o tengo que usar JDBC para este tipo de casos de uso?

Respuesta

14

Sí, puede volver tipos escalares de JPQL consulta

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

así como de las consultas SQL nativas:

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

Tenga en cuenta que en algunos casos resultan tipo puede depender de la base de datos, es decir, puede ser algo así como BigDecimal.

+0

Doh, gracias. No entendí que eso era posible desde los documentos: http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#createNativeQuery(java.lang.String) [Tenga en cuenta que tuve que usar un tipo de objeto y use su intValue() para hacer que su ejemplo funcione.] –

+0

Actualicé la solución para usar '(Number) ... longValue()' que es un tipo estupendo de 'BigInteger', no estoy seguro si hay cualquier DB/driver que no devuelva un subtipo de 'Number' para este caso pero el molde' (largo) 'en la respuesta original" nunca "funciona para mí. (También me pregunto si podría especificar 'Number.class' como un tipo de mapeo para estar seguro (Double.class parece no funcionar: http://stackoverflow.com/questions/8959771/jpql-native-query-using- suma y conteo) – eckes

Cuestiones relacionadas