JPA的级联=删除和休眠的@OnDelete一起使用?

2022-09-04 01:11:53

我继承了一个代码库,几乎所有关系都具有以下注释:

@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "someThing")
@OnDelete(action = OnDeleteAction.CASCADE)

现在我很难理解首先做什么。Hibernate:OnDelete vs cascade=CascadeType.REMOVE很有趣,但不幸的是没有任何答案,JavaDoc特别没有价值。@OnDelete@OnDelete

从其他问题来看,OnDelete注释似乎以某种方式让DB进行级联,而关于ORM的级联指令则这样做,但是将它们一起使用的目的是什么呢?@OneToMany

的级联指令真的不允许 ORM 实现生成基于 DB 的级联吗?@OneToMany


答案 1

假设您有一个一对一的方向关系

class House {

    @OneToOne
    Object door;

}

如果您使用CascadeType.REMOVE,那么删除房屋也会删除门。

    @OneToOne(cascade=CascadeType.REMOVE)
    Object door;

如果您使用@OnDelete那么删除门也会删除房屋。

    @OneToOne
    @OnDelete(action = OnDeleteAction.CASCADE)
    Object door;

在此处阅读更多内容: https://rogerkeays.com/jpa-cascadetype-remove-vs-hibernate-ondelete


答案 2

推荐