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中的級聯型別,指定儲存或更新操作應從父實體級聯到子實體。

這些級聯型別可以單獨使用或組合使用,以根據應用程式的要求管理實體之間的關係。務必謹慎使用級聯型別,因為如果使用不當,可能會導致意想不到的後果。

廣告