(轉)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策略載入的關聯將不再具有延遲性).