天天看點

【簡單易懂】JPA概念解析:CascadeType(各種級聯操作)詳解

CascadeType.PERSIST

官方文檔的說明:Cascade persist operation

看到網上很多部落格對這一枚舉值的解釋是:級聯持久化(儲存)操作(持久儲存擁有方實體時,也會持久儲存該實體的所有相關資料。)

我的内心OS是:媽蛋。我也知道是級聯persist操作啊關鍵是怎麼操作啊。媽蛋。擁有方實體是個什麼玩意兒,該實體又是個什麼玩意兒。

經過實踐檢驗,我的了解是:給目前設定的實體操作另一個實體的權限。這個了解可以推廣到每一個CascadeType。是以,其餘CascadeType枚舉值将不再一一詳細解釋。

For example:

  

可以看到,我們在上面的代碼中給了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,清晰明确,擁有以上所有級聯操作權限。