这是源代码:
@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有什么区别?
级联删除表示如果删除此实体,请删除一个或多个相关实体。
DELETE_ORPHAN表示如果将实体从相关的一对多集合中删除,则不仅将其与当前实体解除关联,而且将其删除。
举个例子,考虑两个实体:房屋和房间。
在房屋的“房间”列表上的“删除”意味着,如果删除房屋,则将其所有房间都删除。
“房屋”上“房间”列表上的DELETE_ORPHAN表示,如果您从该收藏夹中删除一个房间,则将其完全删除。没有它,房间将仍然存在,但不会附加到任何东西(因此为“孤儿”)。
用UML和OO建模术语来说,这基本上是组成和聚合之间的区别。房屋->房间关系是构成的一个例子。房间是房屋的一部分,并不独立存在。
聚合的一个例子是,从班级(父母)到学生(孩子)。删除班级,并且学生仍然存在(无疑在其他班级中)。从班级中删除学生通常并不意味着删除他(她)。