DELETE_ORPHAN和DELETE有什么区别?

时间:2009-09-04 06:41:22

标签: hibernate

这是源代码:

@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有什么区别?

1 个答案:

答案 0 :(得分:62)

Cascade DELETE表示如果删除此实体,请删除相关实体。

DELETE_ORPHAN表示是否从相关的一对多集合中删除实体,然后不仅将其与当前实体取消关联,还将其删除。

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

在House上的房间列表中删除意味着如果你删除了House,那么删除所有房间。

House上Room列表中的

DELETE_ORPHAN表示如果从该集合中删除Room,请将其完全删除。如果没有它,房间仍然存在,但不会附着在任何东西上(因此是“孤儿”)。

在UML和OO建模术语中,这基本上是组合和聚合之间的差异。 House-&gt; Room关系是组合的一个例子。房间是房子的一部分,不是独立存在的。

聚合的一个例子是,Class(parent)to Student(child)。删除班级,学生仍然存在(毫无疑问在其他班级)。从班级中删除学生通常不意味着删除他或她。