Как обрабатывать необязательные отношения в Hibernate при использовании каскадного удаления?

Извините, если это очевидно, но мы ломали голову над этим уже несколько дней.

Рассмотрим три объекта: Родитель, Ребенок и Х:

Родитель имеет отношение @OneToMany к дочернему элементу, настроенный для каскадного удаления и удаления сирот = true.

Child имеет отношение @ManyToOne к Parent с необязательным = false, кроме того, это отношение @NotNull и @JoinColumn имеет nullable = false.

X имеет отношение @ManyToOne к Child с необязательным = true.

Вот что в идеале мы бы хотели, чтобы произошло, когда мы удаляем Parent. Мы бы хотели, чтобы удаление каскадно удаляло все дочерние строки, которые соответствуют удаленному родителю. Пока проблем нет. Но мы также хотели бы, чтобы любой X, который ссылается на любого удаленного ребенка, имел аннулированные отношения Child. Мы не хотим удалять X, мы просто хотим обнулить отношения. Это согласуется с тем, что это "необязательные" отношения.

Как мы это делаем в Hibernate? В идеале мы хотим, чтобы это было декларативным, чтобы нашей бизнес-логике не приходилось "запоминать", чтобы обойти эти отношения. Фактически, если мы вообще хотим использовать каскадирование, оно действительно должно быть декларативным, учитывая, что может быть много уровней каскадирования, прежде чем мы встретим необязательные отношения, которые должны быть обнулены.

Есть намеки? Мы в тупике....

1 ответ

Сопоставить коллекцию с X в классе Child с inverse = false,

Другие вопросы по тегам