休眠OneToMany级联

时间:2019-08-19 11:57:52

标签: java mysql hibernate

我创建了两个具有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?

2 个答案:

答案 0 :(得分:0)

我建议您可以重新检查数据库表。 “ CHILD”表中应有一个“ PARENT_ID”列。通过提供与您的数据库有关的外键违反错误,可以防止删除父级而不删除相应的子级。

答案 1 :(得分:0)

请检查数据库中表PARENT和CHILD的表结构。在CHILD表中以及在删除级联属性集上应该有一个对parent_id的外键引用。

根据您的模型,子级与父级之间没有关系,因此删除父级不会级联子级。 您可以通过将@ManyToOne关系从子级添加到父级来创建双向关系 或在从子端指定单向@ManyToOne关系后使用@OnDelete(action = OnDeleteAction.CASCADE)属性。