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

В чем разница между DELETE_ORPHAN и DELETE?

Вот исходный код:

@OneToOne(fetch = FetchType.LAZY)
@Cascade({SAVE_UPDATE, EVICT, DELETE})
@JoinColumn(name = "A_ID", nullable = true)
private A a;

@OneToMany
@Cascade({SAVE_UPDATE, EVICT, DELETE, DELETE_ORPHAN})
@JoinColumn(name = "B_ID")
private List<B> bList;

В чем разница между DELETE_ORPHAN и DELETE?

4b9b3361

Ответ 1

Cascade DELETE означает, что если этот объект удален, удалите связанный объект или объекты.

DELETE_ORPHAN означает, что объект удаляется из связанной коллекции "один ко многим", а затем не только отключает его от текущего объекта, но и удаляет его.

Чтобы дать вам пример, рассмотрите два объекта: "Дом и комната".

УДАЛИТЬ в списке номеров в Доме означает, что если вы удалите Дом, удалите все его номера.

DELETE_ORPHAN в списке номеров в доме означает, что если вы удалите комнату из этой коллекции, полностью удалите ее. Без него Комната все еще существовала, но не была бы привязана ни к чему (отсюда "сирота" ).

В терминах моделирования UML и OO это в основном разница между композицией и агрегацией. Соотношение "Дом- > Комната" - пример композиции. Комната является частью Дома и не существует независимо.

Примером агрегации является, скажем, класс (родительский) для ученика (дочерний элемент). Удалить класс и Студент все еще существует (несомненно, в других классах). Удаление ученика из класса обычно не означает его удаление.