hql: cómo rellenar la colección perezosa de una entidad secundaria al recuperar la principal

supongamos que tengo @Entity A, que tiene un @ManyToOne ansioso para @Entity B, y este B tiene un @OneToMany perezoso (predeterminado) para una colección llamada "imágenes"

quiero hacer algo como:

"select a from A a join fetch a.b.images where a.b = :b"

esta es una consulta que encuentra una instancia de A dada una instancia de B (el enlace A -> B es unidireccional de A). intentar algo como el enfoque anterior me da una excepción de hibernación:

query specified join fetching, but the owner of the fetched association was not present in the select list

pero intentando algo como

"select a, a.b.images from ..."

devolverá múltiples resultados para cada instancia de A (multiplicado por la cantidad de imágenes)

¿Cómo escribo una consulta en A que rellena una imagen?

preguntado el 08 de noviembre de 11 a las 17:11

1 Respuestas

Pruebe esto: primero debe unirse a fetch ab asignar un alias y luego unirse a fetch alias.images. Cheque documentos para más detalles. No sería una buena idea hacer esto si las imágenes ab y b.imagen son de uno a muchos; conducirá a una explosión del conjunto de resultados. Algo como el tamaño de lote o la sub-selección sería una mejor manera de optimizarlo.

"select a from A a join fetch a.b x join fetch x.images where a.b = :b"

respondido 08 nov., 11:21

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.