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, чтобы он мог быть максимально эффективным.
Вы можете найти больше о них в: