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

时间:2012-05-11 10:06:27

标签: hibernate composite-primary-key optional-values

我遇到了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”属性,但我在文档中找不到这个。

1 个答案:

答案 0 :(得分:1)

因为id对应于数据库中的主键,默认情况下它不是null,Hibernate认为它们是相同的。如果代码本身是唯一的,那么将其声明为id并将其他2保持为正常的多对一