Возможно ли с помощью JPA автоматически аннулировать дочерние элементы при удалении родителя? У меня есть устройство класса модели с привязкой к нему статистики синхронизации. Когда я удаляю устройство, я все равно хочу сохранить статистику, поэтому поставьте полевое устройство в классе Statistics на «null».Удаление объекта в Hibernate/JPA и аннулирование дочерних элементов автоматически
@OneToMany (mappedBy = "device", fetch= FetchType.LAZY)
public List<Statistic> syncStats;
и
@ManyToOne (fetch= FetchType.LAZY)
public Device device;
Есть автоматический способ получения этого эффекта, или я должен сделать это вручную?
В настоящее время я использую:
@PreRemove
protected void removeLinkToStats() {
syncStats.clear();
}
, но это по-прежнему дает "А javax.persistence.PersistenceException был пойман, org.hibernate.exception.ConstraintViolationException: Не удалось выполнить JDBC пакетное обновление"
Вы не можете получить доступ/изменить другие Entites в методах LifeCycle обратного вызова (это в спецификации JPA), поэтому вы получаете исключение. Что произойдет, если вы просто ничего не сделаете об этом, кроме использования orphanRemoval = false? – esej
Нет, я все равно получаю ту же ошибку: обнаружено javax.persistence.PersistenceException, org.hibernate.exception.ConstraintViolationException: не удалось выполнить пакетное обновление JDBC –
Ну, похоже, что работает. Если вы хотите предложить это как ответ, то я принимаю его за указание на меня в направлении: @PreRemove public void testing() { (Статистический stat: syncStats) { stat.device = null; stat.save(); } } –