我继承了几乎所有关系都有以下注释的代码基:

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

现在我很难理解@OnDelete最初是做什么的。Hibernate: OnDelete vs cascade=CascadeType.REMOVE很有意思,但不幸的是没有任何答案,而且@OnDelete的JavaDoc尤其没有价值。
从其他问题来看,OnDelete注释似乎以某种方式让DB进行级联,而@OneToMany上的级联指令让ORM进行级联,但是将它们一起使用的目的是什么?
而且@OneToMany的cascade指令真的不允许ORM实现生成基于DB的cascade吗?

最佳答案

假设你有一对一的定向关系

class House {

    @OneToOne
    Object door;

}

如果使用CascadeType.REMOVE,则删除房屋也将删除门。
    @OneToOne(cascade=CascadeType.REMOVE)
    Object door;

如果你使用@OnDelete,那么删除门也会删除房子。
    @OneToOne
    @OnDelete(action = OnDeleteAction.CASCADE)
    Object door;

在此处阅读更多信息:http://www.ninthavenue.com.au/jpa-cascadetype-remove-vs-hibernate-ondelete

09-04 20:33