0

我遇到了休眠问题。我有一个实体映射到具有自然复合主键的表。主键由强制代码和可选的日期或期间 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" 属性,但我在文档中找不到它。

4

1 回答 1

1

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

于 2012-05-18T12:28:11.010 回答