【JPA】【概念】JPA概念解析:CascadeType(各種級聯操作)詳解
阿新 • • 發佈:2020-11-06
轉
- 《JPA實體關係對映:@ManyToMany多對多關係、@OneToMany@ManyToOne一對多多對一關係和@OneToOne的深度例項解析》
- 《JPA實體關係對映補遺:有關mappedBy的思考》
【在一切開始之前,我要先告訴大家:慎用級聯關係,不要隨便給all許可權操作。應該根據業務需求選擇所需的級聯關係。否則可能釀成大禍。切記】
- CascadeType.PERSIST
官方文件的說明:Cascade persist operation
看到網上很多部落格對這一列舉值的解釋是:級聯持久化(儲存)操作(持久儲存擁有方實體時,也會持久儲存該實體的所有相關資料。)
我的內心OS是:媽蛋。我也知道是級聯persist操作啊關鍵是怎麼操作啊。媽蛋。擁有方實體是個什麼玩意兒,該實體又是個什麼玩意兒。
經過實踐檢驗,我的理解是:給當前設定的實體操作另一個實體的許可權。
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,清晰明確,擁有以上所有級聯操作許可權。