天天看點

Hibernate學習一:Hibernate注解CascadeType

一.概念

  1. 現有一場景:一個管理者可以管理多個網吧,一個網吧可以被多個管理者管理。從中抽象出一個多對多的例子user-bar。
  2. 主要方user:多對多裡面裡面會有第三張表user_bar,由主要方維護這裡面的外鍵記錄,也就是建立一個user的時候必須指定其管理的bar。
  3. 被控方bar:沒有權利更新外鍵記錄。單獨建立一個bar,不需要也不能指定其屬于哪個user。

二. CascadeType

  1. CascadeType.MERGE:級聯更新。建立一個user的時候,指定其管理哪些bar,如果某一個bar不存在,會在建立user的時候一起建立。
  2. CascadeType.PERSIST:級聯儲存。建立一個user的時候,指定其管理哪些bar,如果某一個bar不存在,抛出異常。是以指定其管理哪些bar必須是事先存在的。
  3. CascadeType.REMOVE:級聯删除。删除一個user的時候,會删除它管理的bar,最終是user_bar裡面删了,bar裡面也删了。如果不指定CascadeType.REMOVE,隻删user_bar裡面。
  4. CascadeType.REFRESH:級聯重新整理。第一次查詢某一user和第二次查詢同一user之間,删除了某一bar,CascadeType.REFRESH是的任何時候看到的都是最新的記錄(兩次查詢結果不一樣)。
  5. CascadeType.ALL:包含以上所有。

三. 使用

  1. 根據具體的場景要指定不同的Type。
  2. user和bar之間的關系,并沒有說user不存在了,網吧就不存在,是以不能用CascadeType.REMOVE。
  3. 儲存一個user的時候,指定他能夠管理的網吧必須是已經存在的,是以CascadeType.MERGE和CascadeType.PERSIST中用CascadeType.MERGE。

四. 吐槽

     第一次接觸CascadeType,去網上找資料的時候,NM,全部是一樣的文章,甚至連錯誤都是一起copy過去的,真不贊同這樣的學習方式。

繼續閱讀