簡體   English   中英

JPA / Hibernate“Composite-id類不會覆蓋equals()”

[英]JPA/Hibernate “Composite-id class does not override equals()”

我正在使用JPA並收到以下警告。 我研究了這個,並理解為什么我需要覆蓋它以及Hibernate如何使用這些方法。 我仍然有一個問題:

例外:

Composite-id類不會覆蓋equals()

題:

為什么Hibernate只關心沒有復合ID的類? 默認情況下是否在@Id字段上進行比較,如果只有一個存在,或者是否存在更復雜的內容?

因為當實體沒有復合ID時,它們只有一個基本支持類型之一(Integer,Long,String等),並且這些類已經有明確定義的equals() (和hashCode() )方法。

在使用組合鍵時使用JPA,您應該使用IdClassEmbeddedId使用它們中的任何一個來創建自己的類作為復合鍵,以便能夠使用此組合鍵來比較對象。 EntityManager中的操作,鍵類必須覆蓋equalshashCode

取決於規格:

復合主鍵必須對應於單個持久字段或屬性,或者對應於如下所述的一組此類字段或屬性。 必須定義主鍵類以表示復合主鍵。 當數據庫鍵由多個列組成時,從舊數據庫映射時,通常會出現復合主鍵。 EmbeddedIdIdClass注釋用於表示復合主鍵。

當使用復合主鍵時必須遵循。

  1. 主鍵類必須是公共的,並且必須具有公共的無參數構造函數。
  2. 主鍵類必須是可序列化的。
  3. 主鍵類必須定義equalshashCode方法。 這些方法的值相等的語義必須與鍵映射到的數據庫類型的數據庫相等一致。

暫無
暫無

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

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