1. 程式人生 > >(轉)hibernate註解的CascadeType屬性

(轉)hibernate註解的CascadeType屬性

cascade表示級聯操作   


   CascadeType.MERGE級聯更新:若items屬性修改了那麼order物件儲存時同時修改items裡的物件。對應EntityManager的merge方法 

  
   CascadeType.PERSIST級聯重新整理:獲取order物件裡也同時也重新獲取最新的items時的物件。對應EntityManager的refresh(object)方法有效。即會重新查詢資料庫裡的最新資料   
   

  CascadeType.REFRESH級聯儲存:對order物件儲存時也對items裡的物件也會儲存。對應EntityManager的presist方法   
   

  CascadeType.REMOVE級聯刪除:對order物件刪除也對items裡的物件也會刪除。對應EntityManager的remove方法   

CascadeType.PERSIST只有A類新增時,會級聯B物件新增。若B物件在資料庫存(跟新)在則拋異常(讓B變為持久態)

CascadeType.MERGE指A類新增或者變化,會級聯B物件(新增或者變化)

CascadeType.REMOVE只有A類刪除時,會級聯刪除B類;

CascadeType.ALL包含所有;

CascadeType.REFRESH沒用過。

綜上:大多數情況用CascadeType.MERGE就能達到級聯跟新又不報錯,用CascadeType.ALL時要斟酌下CascadeType.REMOVE

@Fetch:

定義了載入關聯關係的獲取策略. FetchMode 可以是

SELECT (在需要載入關聯的時候觸發select操作), SUBSELECT(只對集合有效,使用了子查詢策略,詳情參考Hibernate參考文件)

JOIN (在載入主實體(owner entity)的時候使用SQL JOIN來載入關聯關係).

JOIN 將覆寫任何延遲屬性 (通過 JOIN策略載入的關聯將不再具有延遲性).