我继承了一个几乎所有关系都具有以下注释的代码库:
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "someThing")
@OnDelete(action = OnDeleteAction.CASCADE)
现在,我一开始就无法理解
@OnDelete
的功能。 Hibernate: OnDelete vs cascade=CascadeType.REMOVE很有趣,但是不幸的是没有任何答案,而且@OnDelete
的JavaDoc毫无值(value)。从其他问题来看,看起来OnDelete批注以某种方式可以使DB进行级联,而
@OneToMany
上的cascading指令则可以由ORM进行级联,但是将它们一起使用的目的是什么?@OneToMany
的级联指令是否真的不允许ORM实现生成基于数据库的级联吗? 最佳答案
假设您有一对一的定向关系
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