我继承了一个代码库,几乎所有关系都有以下注释:
@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
上的级联指令让 ORM 来完成,但使用的目的是什么他们在一起?
@OneToMany
的级联指令真的不允许 ORM 实现生成基于数据库的级联吗?
最佳答案
假设您有一对一的定向关系
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
关于java - JPA的cascade=REMOVE和Hibernate的@OnDelete一起用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8563592/