簡體   English   中英

JPA實體實現equals()方法的正確方法

[英]Correct way of Implementation of equals() method for JPA entities

我已經使用Eclipse通過選擇感興趣的字段/屬性來為我的JPA實體生成hashcode()equals()方法。

但是,我發現Eclipse似乎在生成的equals方法中添加了以下幾行:

    if (getClass() != obj.getClass())
        return false;

進行上述檢查似乎合乎邏輯,但是我在所有JPA實體中都使用LAZY加載的關系,並且我觀察到在某些情況下,當obj的類是某種代理類並且主對象是obj的類時,上述檢查失敗有問題的實體-我檢查了要比較的對象的類,並且兩者並不完全相同,因此,即使對象表示數據庫中的相同記錄,上述條件的評估結果也是false

因此,我的查詢是在為JPA實體實現equals()方法時是否應該比較對象的類。

建議對JPA實體使用業務密鑰相等性 自動生成的等於使用所有字段。

您的實體很可能具有自動生成的技術主鍵(id字段)。 實體保留后,該字段由數據庫填充。 如果您具有自動生成的equals / hashcode,它將包括所有類字段,包括該id字段。 因此,您的實體的equals / hashcode將在您將其持久化后更改,而不會更改任何其他字段(持久化ID之前為null,持久化之后不為null)。

有關更多詳細信息,請閱讀https://docs.jboss.org/hibernate/stable/core.old/reference/en/html/persistent-classes-equalshashcode.html

這是Hibernate參考,但是與主鍵有關的所有概念都應適用於任何JPA提供程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM