Рассматривайте два связанных объекта Bill
и BillItem
. Все счета имеют несколько элементов счета. Bill
класс имеет getItems
, который настроен как OneToMany
с нетерпением.Использует ли спящий режим соединения для объектов, связанных с автозагрузкой
Если я выберу набор векселей (скажем, сегодня для одного клиента), который возвращает 5 счетов. Каждый счет имеет несколько элементов счета.
Может ли Hibernate использовать соединение на столах Bill
и BillItem
для загрузки деталей одним выстрелом? Или будет спящий режим использовать n + 1 запросов, где n - количество счетов?
Если использование запросов присоединения не является поведением по умолчанию, есть ли способ настроить Hibernate для использования соединения в этом случае? Или это потребует использования HQL и некоторых пользовательских кодов для отображения?
Edit: Я думаю, это было описано здесь: JPA eager fetch does not join
Вы можете включить ведение журнала sql в файле persistence.xml, чтобы увидеть фактический выполняемый запрос. –
Я считаю, что вы можете либо загружать EAGER, либо каждый раз загружать BillItems, или вы можете LAZY загружать их, делая второй (или третий и т. д.), только если/когда вы действительно решаете использовать это поле. Не уверенный, как это работает под капотом, возможно, также, что EAGER также выполняет несколько запросов, как только это произойдет раньше - что странно, потому что тогда этот параметр будет бесполезен. –
Возможный дубликат [JPA eager fetch не присоединяется] (http://stackoverflow.com/questions/463349/jpa-eager-fetch-does-not-join) – Teddy