Я пытаюсь понять разницу между LEFT JOIN
и LEFT JOIN FETCH
в Hibernate.
Кто-нибудь может это объяснить?
Спасибо
Я пытаюсь понять разницу между LEFT JOIN
и LEFT JOIN FETCH
в Hibernate.
Кто-нибудь может это объяснить?
Спасибо
"Fetch" сообщает, что спящий режим загружает его сейчас, а не позволяет лениво загружать его. Справочное руководство имеет целую главу, посвященную таким вещам, с которыми приятно познакомиться.
Вы можете использовать FETCH
для настройки производительности вашего приложения. Это одно из ортогональных понятий Hibernate, которое отвечает на вопрос, как (выборочный стиль) выбирается ассоциация. Есть 4 стиля: select
/subselect
/batch
/join
.
Второе понятие - когда (выборочный выбор времени) это должно быть выбрано. Вы можете настроить его с помощью одного из 6 свойств, определенных Hibernate, где наиболее 4 свойства: eager
, lazy
, extra lazy
, proxy
. (Hibernate-core)
Спящий режим по умолчанию:
Присоединиться
JOIN
или (LEFT JOIN
) будут возвращать только родительские объекты.
Присоединиться к выборке
JOIN FETCH
(или LEFT JOIN FETCH
) соберет все ассоциации вместе с объектом-владельцем. Это означает, что коллекция будет извлечена в том же выборе. Это можно показать, включив статистику Hibernate.
Выборка соединения (слева/снаружи) отлично подходит для ассоциаций * ToOne (многие-к-одному или один-к-одному). Он используется с не-пакетами, но помните о декартовой проблеме, которая может возникнуть, когда количество элементов таблицы велико. Обратите внимание, что select
выборки стиля в большинстве литого быстрее.
Обратите внимание, что меньшее количество операторов select
является синонимом меньшего количества циклов между гибернацией и базой данных, но не является синонимом лучшей производительности.