Hibernate DELETE_ORPHAN和DELETE之间有什么区别?

Hibernate DELETE_ORPHAN和DELETE之间有什么区别?,hibernate,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&g

以下是源代码:

@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;
@OneToOne(fetch=FetchType.LAZY)
@级联({SAVE_UPDATE,execute,DELETE})
@JoinColumn(name=“A_ID”,nullable=true)
私人A;
@独身癖
@级联({SAVE_UPDATE,execute,DELETE,DELETE_ORPHAN})
@JoinColumn(name=“B_ID”)
私人名单;

DELETE_ORPHAN和DELETE之间有什么区别

级联删除意味着如果删除该实体,则删除相关实体

DELETE_ORPHAN意味着如果从相关的一对多集合中删除一个实体,那么不仅要将其与当前实体解除关联,还要将其删除

给你一个例子,考虑两个实体:房子和房间。

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

“删除房屋”上“房间”列表中的“孤儿”意味着如果您从该集合中删除一个房间,请将其完全删除。没有它,房间将仍然存在,但不会与任何东西相连(因此称为“孤儿”)

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


例如,类(父)到学生(子)就是聚合的一个例子。删除该类,该学生仍然存在(无疑在其他类中)。从类中删除该学生通常并不意味着删除他或她。

FYI:如果您的Hibernate接口是JPA,那么您可以使用JPA 2.0之后的
@OneToMany
注释中的
orphanRemoving=true
属性来完成这一操作。看见