JPA 的级联 = REMOVE 和 Hibernate 的@OnDelete一起使用吗?



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

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

现在我很难理解@OnDelete的作用。Hibernate: OnDelete vs cascade= cascadtype。REMOVE很有趣,但不幸的是没有任何答案,@OnDelete的JavaDoc特别没有价值。

从其他问题来看,OnDelete注释在某种程度上让DB进行级联,而@OneToMany上的级联指令让ORM这样做,但是将它们一起使用的目的是什么?

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

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

class House {
    @OneToOne
    Object door;
}

如果使用cascadtype。REMOVE则删除房子也会删除门。

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

如果你使用@OnDelete,那么删除门也会删除房子。

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

阅读更多:https://rogerkeays.com/jpa-cascadetype-remove-vs-hibernate-ondelete

最新更新