【簡單易懂】JPA概念解析:CascadeType(各種級聯操作)詳解。
本文閱讀時間5分鐘。由作者三汪首發於簡書。
更多JPA實體對映相關內容請查閱:
- 《JPA實體關係對映:@ManyToMany多對多關係、@OneToMany@ManyToOne一對多多對一關係和@OneToOne的深度例項解析》
- 《JPA實體關係對映補遺:有關mappedBy的思考》
【在一切開始之前,我要先告訴大家:慎用級聯關係,不要隨便給all許可權操作。應該根據業務需求選擇所需的級聯關係。否則可能釀成大禍。切記】
- CascadeType.PERSIST
官方文件的說明:Cascade persist operation
看到網上很多部落格對這一列舉值的解釋是:級聯持久化(儲存)操作(持久儲存擁有方實體時,也會持久儲存該實體的所有相關資料。)
我的內心OS是:媽蛋。我也知道是級聯persist操作啊關鍵是怎麼操作啊。媽蛋。擁有方實體是個什麼玩意兒,該實體又是個什麼玩意兒。
經過實踐檢驗,我的理解是:給當前設定的實體操作另一個實體的許可權。這個理解可以推廣到每一個CascadeType。因此,其餘CascadeType列舉值將不再一一詳細解釋。
For example:
public class Student {
@ManyToMany(cascade=CascadeType.PERSIST,fetch=FetchType.LAZY)
private Set<Course> courses = new HashSet<>();
//其他程式碼略。
}
可以看到,我們在上面的程式碼中給了Student對Course進行級聯儲存(cascade=CascadeType.PERSIST)的許可權。此時,若Student實體持有的Course實體在資料庫中不存在時,儲存該Student時,系統將自動在Course實體對應的資料庫中儲存這條Course資料。而如果沒有這個許可權,則無法儲存該Course資料。
- CascadeType.REMOVE
Cascade remove operation,級聯刪除操作。
刪除當前實體時,與它有對映關係的實體也會跟著被刪除。 - CascadeType.MERGE
Cascade merge operation,級聯更新(合併)操作。
當Student中的資料改變,會相應地更新Course中的資料。 - CascadeType.DETACH
Cascade detach operation,級聯脫管/遊離操作。
如果你要刪除一個實體,但是它有外來鍵無法刪除,你就需要這個級聯許可權了。它會撤銷所有相關的外來鍵關聯。 - CascadeType.REFRESH
Cascade refresh operation,級聯重新整理操作。
假設場景 有一個訂單,訂單裡面關聯了許多商品,這個訂單可以被很多人操作,那麼這個時候A對此訂單和關聯的商品進行了修改,與此同時,B也進行了相同的操作,但是B先一步比A儲存了資料,那麼當A儲存資料的時候,就需要先重新整理訂單資訊及關聯的商品資訊後,再將訂單及商品儲存。(來自良心會痛的評論) - CascadeType.ALL
Cascade all operations,清晰明確,擁有以上所有級聯操作許可權。
以上。
希望我的文章對你能有所幫助。
有什麼意見、見解或疑惑,歡迎留言討論。
相關文章
- MVCC詳解,深入淺出簡單易懂MVC
- 簡單易懂的程式與執行緒詳解執行緒
- 簡單介紹下各種 JavaScript 解析器JavaScript
- Java對各種檔案的操作詳解Java
- 萬億級資料的方法,簡單易懂!
- 紅黑樹,超強動靜圖詳解,簡單易懂
- JavaScript省市級聯選單原理詳解JavaScript
- 實驗 詳解Docker的各種操作小實驗Docker
- Node.js Stream(流) 簡單易懂全解析Node.js
- redux原始碼解讀(簡單易懂版)Redux原始碼
- Java高階特性——註解,簡單易懂Java
- 簡單易懂的PromisePromise
- 一種簡單易懂的 MyBatis 分庫分表方案MyBatis
- Jpa使用詳解
- Android 的各種 Drawable 詳解Android
- JavaScript 各種遍歷方式詳解JavaScript
- 經常用到的git操作,簡單易懂演示一波Git
- 簡單易懂的索引原理索引
- 讓HTTPS簡單易懂HTTP
- mysql 各種級聯查詢後更新(update select).MySql
- C++連結串列類的簡單操作含圖書結構體 簡單易懂C++結構體
- RMAN簡單演示 備份各種檔案
- JavaScript省市級聯效果詳解JavaScript
- SAP各種BOM詳解(包含常用BAPI)API
- windows的各種副檔名詳解Windows
- 四種XML解析方式詳解XML
- Android小遊戲——簡單易懂單機人人對戰五子棋原始碼詳解Android遊戲原始碼
- git各種操作:基本操作 and 多人協作 and 衝突解決Git
- Nginx訪問日誌詳解——各個部分含義——非常簡單Nginx
- 簡單易懂KVC基礎篇
- VMTools的安裝 (簡單易懂)
- 簡單易懂的氣泡排序排序
- 簡單易懂的JSON框架JSON框架
- 簡單易懂的雙向資料繫結解讀
- Spring Data JPA簡單使用Spring
- Linux定時任務crontab通俗易懂簡單扼要地解析Linux
- 網路基礎學習---各種概念
- Django model select的各種用法詳解Django