Подтвердить что ты не робот

Разница между LEFT JOIN и LEFT JOIN FETCH в Hibernate?

Я пытаюсь понять разницу между LEFT JOIN и LEFT JOIN FETCH в Hibernate.

Кто-нибудь может это объяснить?

Спасибо

4b9b3361

Ответ 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 является синонимом меньшего количества циклов между гибернацией и базой данных, но не является синонимом лучшей производительности.