我正在使用JPA并收到以下警告。我研究了这个,并理解为什么我需要覆盖它以及Hibernate如何使用这些方法。我仍然有一个问题:
例外:
Composite-id类不会覆盖equals()
题:
为什么Hibernate只关心没有复合ID的类?它默认情况下比较 @Id
字段,如果只有一个存在,或者是否有更复杂的东西在这里?
我正在使用JPA并收到以下警告。我研究了这个,并理解为什么我需要覆盖它以及Hibernate如何使用这些方法。我仍然有一个问题:
例外:
Composite-id类不会覆盖equals()
题:
为什么Hibernate只关心没有复合ID的类?它默认情况下比较 @Id
字段,如果只有一个存在,或者是否有更复杂的东西在这里?
因为当实体没有复合ID时,它们只有一个基本支持类型(Integer,Long,String等),并且这些类已经定义明确 equals()
(和 hashCode()
) 方法。
因为当实体没有复合ID时,它们只有一个基本支持类型(Integer,Long,String等),并且这些类已经定义明确 equals()
(和 hashCode()
) 方法。
使用复合键时使用JPA,您应该使用任何一个 IdClass
要么 EmbeddedId
使用它们中的任何一个,你需要创建一个自己的类作为复合键,以便能够使用这个复合键来比较对象,这是几个操作所需要的。 EntityManager
关键类必须覆盖 equals
和 hashCode
。
取决于规格:
复合主键必须对应于单个持久字段或属性,或者对应于下面描述的一组此类字段或属性。必须定义主键类以表示复合主键。当数据库密钥由多个列组成时,通常在从旧数据库映射时出现复合主键。该
EmbeddedId
要么IdClass
注释用于表示复合主键。
当使用复合主键时必须遵循。
equals
和 hashCode
方法。这些方法的值相等的语义必须与键映射到的数据库类型的数据库相等性一致。