【问题标题】:What is the difference between DELETE_ORPHAN and DELETE?DELETE_ORPHAN 和 DELETE 有什么区别?
【发布时间】:2010-11-25 13:01:31
【问题描述】:

这里是源代码:

@OneToOne(fetch = FetchType.LAZY)
@Cascade({SAVE_UPDATE, EVICT, DELETE})
@JoinColumn(name = "A_ID", nullable = true)
private A a;

@OneToMany
@Cascade({SAVE_UPDATE, EVICT, DELETE, DELETE_ORPHAN})
@JoinColumn(name = "B_ID")
private List<B> bList;

DELETE_ORPHAN 和 DELETE 有什么区别?

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    Cascade DELETE 表示如果该实体被删除,则删除相关实体或多个实体。

    DELETE_ORPHAN 表示如果一个实体从相关的一对多集合中删除,那么不仅要解除它与当前实体的关联,还要删除它。

    举个例子,考虑两个实体:House 和 Room。

    在房屋的房间列表上删除意味着如果您删除房屋,则删除所有房间。

    在 House 的 Room 列表中的 DELETE_ORPHAN 表示如果您从该集合中删除一个 Room,则将其完全删除。没有它,房间仍然存在,但不会附加到任何东西(因此是“孤儿”)。

    在 UML 和 OO 建模术语中,这基本上是组合和聚合之间的区别。 House->Room 关系是组合的一个例子。 Room 是 House 的一部分,并不独立存在。

    例如,从 Class(父)到 Student(子)的聚合示例。删除班级,学生仍然存在(毫无疑问在其他班级)。从班级中删除学生通常并不意味着删除他或她。

    【讨论】:

    • 仅供参考:如果您的 Hibernate 接口是 JPA,那么您可以使用自 JPA 2.0起的 @OneToMany 注释中的 orphanRemoval = true 属性来完成此操作>。见stackoverflow.com/a/2928481/1029261
    猜你喜欢
    • 2023-03-30
    • 2023-02-20
    • 2010-09-13
    • 1970-01-01
    • 2013-08-26
    • 2014-05-02
    • 1970-01-01
    • 2013-05-21
    • 2021-10-25
    相关资源
    最近更新 更多