Hibernate - Cascade Types
在 hbm 文件中配置集合时,以及在映射 one-to-many、many-to-many 关系时,hbm 文件中的集合元素(例如 list)包含一个 cascade 属性。
示例
...
<class name="Student" table="student_tbl_100">
<id name="studentid">
<generator class="native"></generator>
</id>
<property name="name"></property>
<map name="courses" table="course_tbl_100" cascade="all">
<key column="id"></key>
<index column="course_id" type="string"></index>
<element column="course_name" type="string"></element>
</map>
</class>
...
也可以在注解中指定 cascade 类型,如下所示:
@Entity
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
private Set<Order> orders = new HashSet();
// getters and setters
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
// getters and setters
}
当 Customer 实体被 persist、update 或 delete 时,所有关联的 Order 实体也会被相应地 persist、update 或 delete。
Hibernate 中的不同 Cascade 类型
Hibernate 提供了多种 cascade 选项,用于管理实体之间的关系。以下是 Hibernate 中的不同 cascade 类型:
CascadeType.ALL − Hibernate 中的一种 cascade 类型,指定所有状态转换(create、update、delete 和 refresh)应从父实体级联到子实体。
CascadeType.PERSIST − Hibernate 中的一种 cascade 类型,指定 create(或 persist)操作应从父实体级联到子实体。
CascadeType.MERGE − Hibernate 中的一种 cascade 类型,指定 update(或 merge)操作应从父实体级联到子实体。
CascadeType.REMOVE − Hibernate 中的一种 cascade 类型,指定 delete 操作应从父实体级联到子实体。
CascadeType.REFRESH − Hibernate 中的一种 cascade 类型,指定 refresh 操作应从父实体级联到子实体。
CascadeType.DETACH − Hibernate 中的一种 cascade 类型,指定 detach 操作应从父实体级联到子实体。
CascadeType.REPLICATE − Hibernate 中的一种 cascade 类型,指定 replicate 操作应从父实体级联到子实体。
CascadeType.SAVE_UPDATE − Hibernate 中的一种 cascade 类型,指定 save 或 update 操作应从父实体级联到子实体。
这些 cascade 类型可以单独使用或组合使用,根据应用程序的需求管理实体之间的关系。使用 cascade 类型时需谨慎,因为如果使用不当,可能会导致意外后果。