java - JPA的cascade=REMOVE和Hibernate的@OnDelete一起用?

标签 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 特别毫无值(value)。

从其他问题来看,OnDelete 注释似乎让 DB 以某种方式进行级联,而 @OneToMany 上的级联指令让 ORM 来完成,但使用的目的是什么他们在一起?

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

最佳答案

假设您有一对一的定向关系

class House {

    @OneToOne
    Object door;

}

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

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

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

    @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/

相关文章:

java - 如何使用 JPA 将 Map (java.util.Map) 对象持久保存在实体内并确保持久性级联?

java - 尝试使用 @ManyToOne 映射来持久化实体

hibernate - 实现接口(interface)的枚举类型的映射集合

java - Hibernate:检索未连接的行

java - 有没有什么解决方案可以使用 spring4 websocket 向一组用户(不是所有用户)发送消息?

java - 是否可以确定 View 列是否包含常量数据或仅包含 UI 数据?

java - Spring Boot hibernate 使用不同的命名约定来保存 session

java - 如何使用spring注入(inject)JPA EntityManager

java - 所有子类的主类实例

java - 如何在类中定义java方法?