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中文網其他相關文章!