Вероятно, бывают случаи, когда вы хотите загрузить полный граф объектов, и другие, когда вам нужно гораздо меньше данных (и вы не хотите платить за производительность, связанную с загрузкой всего этого). Итак, давайте предположим, что ваши потребности варьируются.
В общем, отложенная загрузка Hibernate, но вы можете загрузить дополнительные данные одним из нескольких способов (подробнее см. Документацию Hibernate):
- Пока ваш сеанс завершен (вы не закрыли его), если вы запрашиваете поля A, они могут быть загружены по требованию . Это чрезвычайно просто и гибко, но может быть неэффективно, если выполняется много обращений к базе данных.
- Вы можете создать HQL-запрос , чтобы указать, что вы хотите загрузить A, а также некоторые поля. Используйте FETCH в запросе для этого.
- Вы можете сделать то же самое с Criteria API. Вместо указания запроса вы выполняете вызовы методов.
Образец для ленивых:
A a = ...; // load A
String name = a.getB().getName(); // triggers an implicit query to load B
Образец для HQL:
select a
from A a
left join a.b b
left join a.c c
where a.id = :id