Hibernate:复合自然主键中的可选属性

Hibernate:复合自然主键中的可选属性,hibernate,composite-primary-key,optional-values,Hibernate,Composite Primary Key,Optional Values,我遇到了Hibernate问题。我有一个实体映射到一个具有自然复合主键的表。主键由强制代码和可选日期或期间ID组成,因此日期和期间ID是互斥的。我在我的hbm中映射了它(是的,我们还没有注释),如: 删除PeriodId key属性可以解决此问题,并且成功填充myEntity org.hibernate.type.NullableType.nullSafeSet:151 - binding '1156' to parameter: 4 org.hibernate.type.NullableTyp

我遇到了Hibernate问题。我有一个实体映射到一个具有自然复合主键的表。主键由强制代码和可选日期或期间ID组成,因此日期和期间ID是互斥的。我在我的hbm中映射了它(是的,我们还没有注释),如:

删除PeriodId key属性可以解决此问题,并且成功填充myEntity

org.hibernate.type.NullableType.nullSafeSet:151 - binding '1156' to parameter: 4
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1156' as column: LVE1_69_
org.hibernate.type.NullableType.nullSafeGet:193 - returning '2012-04-06 00:00:00' as column: PNL2_69_
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1156' as column: LVE1_69_
LOTS MORE RETURNING lines.

我怀疑key属性中有not null=“false”属性,但在文档中找不到该属性。

因为id对应于数据库中默认为非null的主键,Hibernate认为它们是相同的。如果代码本身是唯一的,则将其声明为id,并将其他2个保留为正常的多对一

代码不是唯一的,与句点id或日期的组合是唯一的,它在数据库中是有效的唯一约束。因此,复合_id不是null,而是由一个可选的(可为null的)属性组成。但是它不是有效的主键,它与NHibernate中的id是等价的。还有一次,我在postgres中遇到了一个问题,在移除空值之前,禁用了对带有空值的列的唯一约束。感谢您的反应,我不确定带有可选属性的复合id是否是有效的主键,是否有引用?在这种情况下,主键实际上是不必要的,因为记录没有被引用到任何地方。顺便说一句,我通过添加代理自动增量PK解决了这个问题,但我仍然认为这会污染您的数据模型。
org.hibernate.type.NullableType.nullSafeSet:151 - binding '1157' to parameter: 4
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1157' as column: LVE1_69_
org.hibernate.type.NullableType.nullSafeGet:187 - returning null as column: PRD2_69_
END OF LOGGING
org.hibernate.type.NullableType.nullSafeSet:151 - binding '1156' to parameter: 4
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1156' as column: LVE1_69_
org.hibernate.type.NullableType.nullSafeGet:193 - returning '2012-04-06 00:00:00' as column: PNL2_69_
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1156' as column: LVE1_69_
LOTS MORE RETURNING lines.