一尘不染

DELETE_ORPHAN和DELETE有什么区别?

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


阅读 239

收藏
2020-06-20

共1个答案

一尘不染

级联删除表示如果删除此实体,请删除一个或多个相关实体。

DELETE_ORPHAN表示如果将实体从相关的一对多集合中删除,则不仅将其与当前实体解除关联,而且将其删除。

举个例子,考虑两个实体:房屋和房间。

在房屋的“房间”列表上的“删除”意味着,如果删除房屋,则将其所有房间都删除。

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

用UML和OO建模术语来说,这基本上是组成和聚合之间的区别。房屋->房间关系是构成的一个例子。房间是房屋的一部分,并不独立存在。

聚合的一个例子是,从班级(父母)到学生(孩子)。删除班级,并且学生仍然存在(无疑在其他班级中)。从班级中删除学生通常并不意味着删除他(她)。

2020-06-20