hql - как заполнить ленивую коллекцию дочерней сущности при извлечении родителя - PullRequest
0 голосов
/ 08 ноября 2011

предположим, у меня есть @Entity A, в котором есть рвение от @ManyToOne до @Entity B, а у этого B - ленивый (по умолчанию) @OneToMany в коллекцию под названием "images"

я хочу сделать что-тонапример:

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

это запрос, который находит экземпляр A с данным экземпляром B (ссылка A -> B является однонаправленной от A).попытка чего-то похожего на приведенный выше подход вызывает у меня исключение гибернации:

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

, но попытка чего-то вроде

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

будет возвращать несколько результатов для каждого экземпляра A (умноженного на количество изображений)

как мне написать запрос на А, который заполняет абижимы?

1 Ответ

1 голос
/ 08 ноября 2011

Попробуйте: сначала нужно присоединиться к fetch a.b, назначить псевдоним, а затем присоединиться к fetch alias.images. Проверьте документы для более подробной информации. Это было бы не очень хорошей идеей, если a.b и b.images одинаковы для многих - это приведет к взрыву набора результатов. Что-то вроде пакетного размера или дополнительного выбора будет лучшим способом его оптимизации.

"select a from A a join fetch a.b x join fetch x.images where a.b = :b"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...