我遇到了Hibernate的问题。我有一个实体映射到一个具有自然复合主键的表。主键由强制代码和可选的日期或期间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执行查询,其中日期不为null,并且句点为null无法填充myEntity对象。我看不出它失败的原因,但我可以看到,在返回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 key-property解决了问题,并且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”属性,但我在文档中找不到这个。
答案 0 :(得分:1)
因为id对应于数据库中的主键,默认情况下它不是null,Hibernate认为它们是相同的。如果代码本身是唯一的,那么将其声明为id并将其他2保持为正常的多对一