我遇到了休眠问题。我有一个实体映射到具有自然复合主键的表。主键由强制代码和可选的日期或期间 ID 组成,因此 date 和 period_id 是互斥的。我将它映射到我的 hbm 中(是的,我们还没有注释),例如:
<composite-id name="myEntity" class="myEntity">
<key-property name="code" column="bookcode" />
<key-property name="period" column="PRD_ID" />
<key-property name="pDate" column="PNL_DT"/>
</composite-id>
但是对日期不为空且期间为空的 myEntity 进行查询无法填充 myEntity 对象。我看不出它为什么会失败,但我可以看到在返回 period 的 NULL 值后,hibernate 停止记录返回的属性。
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
删除 PeriodId 键属性解决了他的问题,并且 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-property 中有一个 not-null="false" 属性,但我在文档中找不到它。