Это не Hibernate, это часть стандарта JPA 2.0. У вас есть два аспекта в ваших аннотациях, во-первых, использование orphanRemoval.
Вы используете orphanRemoval, когда родительская сущность контролирует создание и уничтожение дочерней сущности. В UML это будет случай композиции, которая является сильным владельцем и согласованным сроком службы частей в целом. Спецификация JPA 2.0 в разделе 2.9: Связи сущностей гласит:
Ассоциации, которые указаны как
OneToOne или OneToMany поддерживают использование
опция orphanRemoval.
следующие поведения применяются, когда
действует orphanRemoval:
Если объект, являющийся целью отношения, удаляется из
отношения (установив
отношение к нулю или удаление
сущность из отношений
сбор), операция удаления будет
применяться к сущности
осиротел. Операция удаления
применяется во время сброса
операция. СиротаУдалить
функциональность предназначена для субъектов
которые в частной собственности "принадлежат" их
родительская сущность. Портативные приложения
в противном случае не должно зависеть от
конкретный порядок удаления, и должен
не переназначать объект, который был
осиротевший к другим отношениям или
иначе попытайтесь упорствовать. Если
Сирота является
отдельный, новый или удаленный объект,
семантика orphanRemoval не
применяются.
Если операция удаления применяется к объекту управляемого источника, удаление
операция будет каскадно
цель отношений в соответствии с
правила раздела 3.2.3, (и, следовательно,
не нужно указывать
каскад = УДАЛИТЬ для
отношения) [20].
Вторым аспектом будет использование cascase = REMOVE, если не подразумевается orphanRemoval.
Раздел 3.2.3: Удаление содержит подробную информацию о процессе удаления:
Семантика операции удаления,
применяются к сущности X следующим образом:
• Если X новый объект, он игнорируется
с помощью операции удаления. Тем не менее
операция удаления каскадно
объекты, на которые ссылается X, если
Отношения от Х к этим другим
лица помечены с
каскад = УДАЛИТЬ или каскад = ВСЕ
значение элемента аннотации.
• Если X является управляемым объектом, удаление
операция вызывает его удаление.
Операция удаления каскадно
объекты, на которые ссылается X, если
отношения от Х до этих других
лица помечены с
каскад = УДАЛИТЬ или каскад = ВСЕ
значение элемента аннотации.
• Если X является отдельным объектом,
IllegalArgumentException будет
брошенный операцией удаления (или
фиксация транзакции не удалась).
• Если X является удаленным объектом, это
игнорируется операцией удаления.
Удаленная сущность X будет удалена
из базы данных на или раньше
фиксация транзакции или в результате
операция смыва. После сущности
был удален, его состояние (кроме
для сгенерированного состояния) будет
субъект в точке, в которой
была вызвана операция удаления.