我创建了两个具有OneToMany关系的实体,但是当我从数据库中手动删除父级时,子级仍然存在。我尝试了不同的解决方案,但似乎没有任何效果。我在做什么错了?
@Entity
@Table(name = "PARENT")
public class Parent implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Integer id;
@OneToMany(cascade = CascadeType.PERSIST, orphanRemoval = true)
@JoinColumn(name = "parent_id")
public List<Child> children = new ArrayList<Child>();
}
@Entity
@Table(name = "CHILD")
public class Child implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Integer id;
}
我尝试了以下类似的解决方案,但是由于某些原因,当我通过命令手动删除父项时,在删除父项后仍保留子项。
What is the difference between cascade and orphan removal from DB?
答案 0 :(得分:0)
我建议您可以重新检查数据库表。 “ CHILD”表中应有一个“ PARENT_ID”列。通过提供与您的数据库有关的外键违反错误,可以防止删除父级而不删除相应的子级。
答案 1 :(得分:0)
请检查数据库中表PARENT和CHILD的表结构。在CHILD表中以及在删除级联属性集上应该有一个对parent_id的外键引用。
根据您的模型,子级与父级之间没有关系,因此删除父级不会级联子级。 您可以通过将@ManyToOne关系从子级添加到父级来创建双向关系 或在从子端指定单向@ManyToOne关系后使用@OnDelete(action = OnDeleteAction.CASCADE)属性。