首頁 > Java > java教程 > JPA 實體:覆寫還是不覆寫 hashCode() 和 equals()?

JPA 實體:覆寫還是不覆寫 hashCode() 和 equals()?

Linda Hamilton
發布: 2024-12-01 13:26:11
原創
723 人瀏覽過

JPA Entities: To Override or Not Override hashCode() and equals()?

JPA:解決hashCode()/equals() 困境

在JPA 實體實作領域,hashCode() 和equals() ()方法在確保資料完整性和物件身分方面發揮關鍵作用。但是,實現的選擇可能會對您的應用程式產生重大影響。

選項和影響

有多種潛在的實現,每種都有其優點和缺點:

  • 沒有覆蓋:

    • 符合hashCode()/equals()合約
    • 無法辨識相同的物件(例如,來自不同會話)
    • 處理分離的實體好嗎
  • 基於主鍵覆蓋:

    • 破壞hashCode()/equals() 合約
    • 識別相同的實體(託管)
    • 問題分離實體
  • 基於業務🎜>基於業務🎜>

    基於業務🎜>基於業務🎜>
    • 基於業務🎜>基於業務🎜>
    • 基於業務🎜>基於業務🎜>
    • 基於業務🎜>基於業務🎜> ID 覆蓋:
  • 破壞hashCode()/equals() 合約

辨識相同的實體(代管)分離實體沒有問題

  • 建議
  • 選擇合適的選項取決於您的特定情況申請要求:
  • 為確保不變性和List/Set 運算: 不要重寫 hashCode() 和 equals()。
用於識別相同的物件:

基於主物件重寫hashCode() 和equals() key.

用於處理分離的實體:
    基於以下內容重寫hashCode() 和equals() Business-id 或考慮實作您自己的身分管理機制。
  • 其他注意事項
如果使用Hibernate,請閱讀文章“不要讓Hibernate 竊取您的身份”,了解具體實現的細微差別。 請記住,重寫 hashCode() equals() 破壞了物件 API 中定義的約定。 考慮在 hashCode() 中使用多個值時對基於雜湊的集合的影響(這可能會導致檢索問題)。

以上是JPA 實體:覆寫還是不覆寫 hashCode() 和 equals()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板