CascadeType vs FetchType

Хотелось бы узнать, в чем разница между CascadeType и FetchType в Hibernate?

Они кажутся очень похожими, но я думаю, они не взаимозаменяемы, верно? Когда их использовать? Могут ли они использоваться одновременно?

4 ответа

Это 2 разные вещи:

CascadeType в Hib. может быть REFRESH, MERGE,..., ALL Вы помещаете его в связанную сущность, и он определяет поведение связанной сущности, если текущая сущность: обновлена, обновлена, удалена и т. д. Поэтому, когда на вашу сущность влияют, CascadeType сообщает, следует ли затрагивать связанный объект.

FetchType может быть только 2: EAGER а также LAZY, Этот файл вы также помещаете под связанный объект, и он определяет, следует ли инициализировать связанный объект сразу после инициализации текущего объекта (EAGER) или только по запросу (LAZY).

Каскадирование используется для распространения переходов состояния сущности из родительской сущности в дочернюю.

Выборка используется для загрузки связанных объектов, и вы можете иметь:

  • глобальные политики выборки (определяемые посредством сопоставления сущностей)
  • политика выборки во время запроса (с использованием директивы HQL/JPQL FETCH)

Обе конфигурации разные, вы можете связать это с простым SQL.

Каскад сообщает вам, что происходит, когда одна сущность обновляется (при удалении каскада в SQL)

Fetch сообщает, как будет выполняться запрос ( join, lazy ...)

Между ними есть большая разница.

  • CascadeType - это свойство, используемое для определения каскадирования в отношениях между родителем и потомком.
  • FetchType - это свойство, используемое для определения стратегий выборки, которые используются для оптимизации сгенерированного оператора Hibernate, чтобы он мог быть максимально эффективным.

Вы можете найти больше о них в:

  1. Hibernate - выборка стратегий
  2. Hibernate JPA Каскадные Типы
Другие вопросы по тегам