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