首頁 > Java > java教程 > 主體

## 在 JPA 和 Hibernate 中我什麼時候應該使用 `persist()` 與 `merge()`?

Susan Sarandon
發布: 2024-10-26 12:38:03
原創
673 人瀏覽過

## When Should I Use `persist()` vs. `merge()` in JPA and Hibernate?

理解JPA 和Hibernate 中Persist() 和Merge() 之間的區別

在JPA 和Hibernate 中, persist() 和merge() () 方法在管理實體和處理資料持久性方面發揮關鍵作用。但是,它們的行為有明顯的差異。

Persist()

JPA 規範定義的persist() 方法的操作如下:

  • 如果實體是新的且不受管理,則在提交或刷新交易時,它將變為受管理並將保存到資料庫。
  • 如果實體已被管理或刪除,則操作被忽略。
  • 如果實體被分離,可能會拋出異常,或者持久化操作可能在刷新或提交期間失敗。
  • 級聯運算會套用於任何已引用的實體cascade=PERSIST 或cascade=ALL 註解。

Merge()

另一方面,merge() 方法有一組不同的語意:

  • 如果實體已分離,則其狀態將複製到具有相同識別的預先存在的託管實體,或建立新的託管副本。
  • 如果實體是新實體,建立一個新的託管實體,並從傳入實體複製其狀態。
  • 如果刪除該實體,則會引發異常。
  • 如果實體是受管理的,則忽略該操作,但如果使用cascade=MERGE或cascade=ALL註釋,級聯操作仍然會套用於所引用的實體。
  • 合併實體引用使用cascade=MERGE或cascade=ALL註解的所有關係的託管實體。
  • 如果實體與對非級聯關係的參考合併,則合併實體的關聯將傳回對具有相同識別的託管物件的參考。

當使用Persist() 或Merge()

基於這些差異,以下指南可以幫助您選擇合適的方法:

  • 在需要時使用persist()建立一個新的或更新尚未由持久化上下文管理的現有實體。
  • 當您想要更新已管理但已在持久化上下文之外修改的現有實體時,請使用 merge() .

以上是## 在 JPA 和 Hibernate 中我什麼時候應該使用 `persist()` 與 `merge()`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!