Разница между LEFT JOIN и LEFT JOIN FETCH в Hibernate?
Я пытаюсь понять разницу между LEFT JOIN и LEFT JOIN FETCH в Hibernate.
Кто-нибудь может это объяснить?
Спасибо
Ответ 1
"Fetch" сообщает, что спящий режим загружает его сейчас, а не позволяет лениво загружать его. Справочное руководство имеет целую главу, посвященную таким вещам, с которыми приятно познакомиться.
Ответ 2
Вы можете использовать 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 является синонимом меньшего количества циклов между гибернацией и базой данных, но не является синонимом лучшей производительности.