前言:使用JPA,創建一對多雙向關聯實體對象時,需要給一對多的關聯指定級聯操作。
級聯操作有四種類型:級聯更新(合併),級聯保存,級聯刷新,和級聯刪除。
詳情:現在我們分別介紹以上四種級聯類型的詳細情況。
1.CascadeType.REFRESH 級聯刷新(使用場景,當我們從數據庫中請求了一條數據,在我們對這條數據進行業務處理的時候,另一個用戶可能會修改數據庫中的這條數據的記錄,那麼此時我們就需要進行級聯刷新了,否則我們處理的數據就失去了意義。)
2.CascadeType.PERSIST 級聯持久化(比如在發出保存訂單操作時,會同時發出保存訂單項的操作語句) *訂單和訂單項之間是一對多的關係。
3.CascadeType.MERGE 級聯合並 也就是級聯更新(當處於遊離狀態下的對象被修改了,那麼與他相關聯的實體中的對象也會執行修改,如果開啓了級聯更新,那麼此實體對象的更新會波及到與其關聯的實體對象)
4.CascadeType.REMOVE 級聯刪除 (比如:如果設置了級聯刪除,當刪除訂單時,會同時刪除對應的訂單項,但是需要注意此操作的先後順序爲先刪除訂單項,再刪除訂單)
注:即使我們定義了級聯操作,也只有在我們使用EntityManage 對象的api方法時纔會生效。比如說當我們調用了refresh();方法時,級聯刷新纔會生效。當調用了remove()方法時,級聯刪除纔會生效。而使用HQL語句進行刪除,則不會觸發級聯刪除操作。
好了,對於級聯操作的四種類型就介紹完了,在我們的項目中需要根據具體的業務需求合理應用級聯操作。