JPA的cascade = REMOVE和Hibernate的@OnDelete一起使用?
我inheritance了一个代码库,几乎所有关系都有以下注释:
@OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "someThing") @OnDelete(action = OnDeleteAction.CASCADE)
现在我无法理解@OnDelete
首先做的@OnDelete
。 Hibernate:OnDelete vs cascade = CascadeType.REMOVE很有意思,但遗憾的是没有任何答案,而且@OnDelete
的JavaDoc特别没用。
从其他问题来看,OnDelete注释看起来像某种程度上让DB进行级联,而@OneToMany
上的级联指令让ORM执行它,但是将它们一起使用的目的是什么?
并且@OneToMany
的级联指令真的不允许ORM实现生成基于DB的级联吗?
假设你有一对一的方向关系
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