No lo evite, el SELECCIONAR NUEVO está allí porque hay casos de uso perfectamente válidos para él como se recuerda en el §10.2.7.2. JPQL Constructor expresiones en la cláusula SELECT del EJB 3.0 JPA Specification:
Un constructor se puede utilizar en la lista SELECT devolver uno o más de Java casos. La clase especificada no es requerida para ser una entidad o ser mapeada en la base de datos. El nombre del constructor debe ser totalmente calificado.
Si se especifica un nombre de clase de entidad en la nueva cláusula SELECT, los instancias de entidad resultantes son en el nuevo estado .
SELECT NEW com.acme.example.CustomerDetails(c.id, c.status, o.count)
FROM Customer c JOIN c.orders o
WHERE o.count > 100
En resumen, utilice SELECT NUEVO cuando no se desea recuperar una entidad completa o un gráfico lleno de objetos de una manera segura tipo (en contraposición a un Object[]
). Si mapea el resultado de una consulta en una clase de entidad o una clase no asignada dependerá de su selección. Un ejemplo típico sería una pantalla de lista (donde es posible que no desee todos los detalles).
En otras palabras, no lo use en todas partes, pero no prohíba su uso (algunas cosas son solo negras o blancas).
Quiero hacer lo mismo, pero en mi consulta tengo algunas referencias de juntar y jpa: 'la consulta especificó la recuperación de uniones, pero el propietario de la asociación obtenida no estaba presente en la lista de selección'. Triste ... –
Por favor, edite su respuesta y haga que "El nombre del constructor debe estar completamente calificado" en negrita ... es muy importante y una fuente común de errores. –
La respuesta es totalmente correcta, pero el documento vinculado no coincide con la respuesta. Debería ser http://jcp.org/aboutJava/communityprocess/final/jsr317/index.html – Pumuckline