Después de actualizar a una versión más reciente de hibernación (supongo que venía con el cambio de JBoss 4.2.2 a JBoss 6), algunas consultas fallan con el mensaje:"automática" recuperación por unión de las entidades anidadas falla después de actualizar Hibernate
Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: query specified join fetching, but the owner of the fetched association was not present in the select list [FromElement{explicit,not a collection join,fetch join,fetch non-lazy properties,classAlias=null,role=null,tableName= (...)
este es siempre el caso cuando se utiliza una consulta como esta:
SELECT entityA FROM EntityA entityA
JOIN FETCH entityA.entityB
LEFT JOIN FETCH entityA.entityB.someField
WHERE entityA.entityB.anotherField LIKE :someParameter
la solución al problema es dar "entityA.entityB" un alias y luego utilizar este alias en la cláusula WHERE
. Pero en algunas consultas, el LEFT JOIN FETCH
no se proporciona explícitamente, pero la cláusula WHERE
usa la propiedad de una entidad a la que se hace referencia. ¿También fallará allí? ¿Qué ha cambiado, por lo que de repente falla después de cambiar a una nueva versión de JBoss?
La siguiente question está relacionada con esta pregunta e incluye la solución, pero no explica el problema.
Su pregunta me ayudó a encontrar una solución a mi problema, después de actualizar de hibernate 3.2.6.ga a 3.5.6-Final, obtenía la 'consulta especificada de obtención de unión, pero el propietario de la asociación obtenida no era presente en la lista de selección ', usando el enfoque de alias que sugeriste que funciona, ¡no puedo ayudarte con el' por qué '! –
es este HQL o JPQL estándar? – wrschneider
Esto se hace a través de 'EntityManager.createQuery', así que supongo que es HQL. –