Разница между LEFT JOIN и LEFT JOIN FETCH в Hibernate? - PullRequest
43 голосов
/ 27 июля 2011

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

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

Спасибо

Ответы [ 2 ]

54 голосов
/ 27 июля 2011

"fetch" говорит hibernate загружать его сейчас вместо того, чтобы позволять загружать его лениво.Справочное руководство содержит целую главу , посвященную таким вещам, с которыми полезно ознакомиться.

2 голосов
/ 13 декабря 2018

Вы можете использовать FETCH для настройки производительности вашего приложения. Это одно из ортогональных понятий Hibernate, которое отвечает на вопрос как (стиль выборки) ассоциация извлекается. Существует 4 стиля: select / subselect / batch / join.

Вторым понятием является , когда (время выборки) оно должно быть выбрано. Вы можете настроить его с помощью одного из 6 свойств, определенных Hibernate, где большинство из 4 свойств: eager, lazy, extra lazy, proxy. ( hibernate-core )

Спящий режим используется по умолчанию:

  • collection : ленивая выборка
  • однозначная ассоциация : извлечение ленивых прокси

Регистрация

JOIN или (LEFT JOIN) будет только возвращать родительские объекты.

Регистрация присоединения

JOIN FETCH (или LEFT JOIN FETCH) соберет все ассоциации вместе с объектом их владельца. Это означает, что коллекция будет извлечена в том же выборе. Это можно показать, включив статистику Hibernate.

(левое / внешнее) извлечение соединения отлично подходит для ассоциаций * ToOne (многие-к-одному или один-к-одному). Он используется с не сумками, но помните о декартовой проблеме, которая может возникнуть, когда количество элементов таблицы велико. Обратите внимание, что стиль извлечения select в большинстве случаев выполняется быстрее.

Обратите внимание, что меньшее количество операторов select является синонимом менее циклических переходов между hibernate и базой данных, но не является синонимом лучшей производительности.

...