Hibernate - 级联类型



在hbm文件中配置集合时,在映射一对多、多对多映射时,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>
...

级联类型也可以在注解中提到,如下所示

@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实体时,所有关联的Order实体也将被持久化、更新或删除。

Hibernate中的不同级联类型

Hibernate提供了几种级联选项类型,可用于管理实体之间的关系。以下是Hibernate中的不同级联类型

  • CascadeType.ALL − Hibernate中的级联类型,指定所有状态转换(创建、更新、删除和刷新)都应从父实体级联到子实体。

  • CascadeType.PERSIST − Hibernate中的级联类型,指定创建(或持久化)操作应从父实体级联到子实体。

  • CascadeType.MERGE − Hibernate中的级联类型,指定更新(或合并)操作应从父实体级联到子实体。

  • CascadeType.REMOVE − Hibernate中的级联类型,指定删除操作应从父实体级联到子实体。

  • CascadeType.REFRESH − Hibernate中的级联类型,指定刷新操作应从父实体级联到子实体。

  • CascadeType.DETACH − Hibernate中的级联类型,指定分离操作应从父实体级联到子实体。

  • CascadeType.REPLICATE − Hibernate中的级联类型,指定复制操作应从父实体级联到子实体。

  • CascadeType.SAVE_UPDATE − Hibernate中的级联类型,指定保存或更新操作应从父实体级联到子实体。

这些级联类型可以单独使用或组合使用,以根据应用程序的要求管理实体之间的关系。务必谨慎使用级联类型,因为如果使用不当,可能会导致意想不到的后果。

广告