Hibernate Self Двунаправленный каскад OneToMany удалить не работает

У меня есть проблема с двунаправленными отношениями, которые не работают каскадным удалением, у меня есть следующая сущность, которая в основном собирает семейное древо со многими уровнями, если я пытаюсь что-то вроде em.remove (family), оно не удаляется дети и поймать это исключение "нарушение целостности - дочерняя запись найдена"

public class Family{

  @Id
  public Long id;

  public String name;

  @ManyToOne
  @JoinColumn(name = "id_father")
  public Family father;

  @OneToMany(cascade = CascadeType.REMOVE, orphanRemoval = true)
  @JoinColumn(name = "id_father")
  public List<Family> children;

  //getters setters
  //hashcode equals

}

Таблица

Я бы

название

id_father

1 ответ

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

Я создал семью с 2 детьми и смог запустить ваш код, он удалял семью с каждым ребенком. Можете ли вы успешно удалить семью без детей? Возможно, в этом и заключается проблема.

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