Hibernate 7: однонаправленное отношение «многие к одному» и каскадное удаление базы данныхJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Hibernate 7: однонаправленное отношение «многие к одному» и каскадное удаление базы данных

Сообщение Anonymous »

У меня есть обширная модель JPA, которая использует исключительно однонаправленные отношения @ManyToOne от дочернего элемента к родительскому, например так.

Код: Выделить всё

public class Child {
@ManyToOne(optional = false)
@JoinColumn(name = "parent")
private Parent parent
}
Подобных отношений существует множество в довольно запутанной иерархии, ведущей к самой корневой сущности. Мы настроили каскадное удаление базы данных, поэтому удалять самый корневой объект необходимо только тогда, когда мы хотим удалить что-либо. Это было значительно эффективнее, чем в JPA. Раньше это работало нормально, но с Hibernate 6 мы столкнулись с проблемой.
Если я загрузил дочерний объект, скажем, в какой-то момент теста, а затем попытаюсь удалить родительский объект, я получаю такое исключение

Код: Выделить всё

org.hibernate.TransientObjectException: persistent instance references an unsaved transient instance of 'Parent'
Из стека я вижу, что это исключение вызывается через CascadingAction.CHECK_ON_FLUSH. Из отладки я также вижу, что это вызывает отношение от дочернего элемента к родительскому. Возможно, это не является необоснованной проверкой того, что загруженные объекты не имеют висячих ссылок. Однако они, очевидно, будут это делать, поскольку мы не удаляем объекты с помощью JPA, это делается посредством каскадных удалений.
Мне действительно не хочется повторять каскадные удаления в JPA, и, как уже упоминалось, это значительно медленнее, чем каскадное удаление базы данных.
Есть ли способ отключить эту проверку или вместо этого пометить эти отношения как каскадные удаления базы данных, чтобы Hibernate знал об этом можно просто безопасно удалить объекты?
Примечание: я использую Spring Boot.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ding-delet
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»