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>

ただし、日付が null ではなく、期間が null である myEntity に対してクエリを実行すると、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 キー プロパティを削除すると問題が解決し、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 は、デフォルトでは null ではないデータベースの主キーに対応するため、Hibernate はそれらを同じと見なします。コードがそれ自体で一意である場合は、それを id として宣言し、他の 2 つは通常の多対 1 のままにします

于 2012-05-18T12:28:11.010 に答える