JPA cascade = REMOVE和Hibernate @OnDelete一起使用?

时间:2011-12-19 15:34:33

标签: java hibernate jpa jpa-2.0

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

@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做到了,但是将它们一起使用的目的是什么呢? / p>

@OneToMany的级联指令真的不允许ORM实现生成基于数据库的级联吗?

1 个答案:

答案 0 :(得分:11)

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

class House {

    @OneToOne
    Object door;

}

如果您使用CascadeType.REMOVE,那么删除房屋也将删除门。

    @OneToOne(cascade=CascadeType.REMOVE)
    Object door;

如果您使用@O​​nDelete,那么删除门也将删除房屋。

    @OneToOne
    @OnDelete(action = OnDeleteAction.CASCADE)
    Object door;

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