キーのフィールド名が一致しない、複合主キーを使用した 1 対 1 の関係に関連するマッピング ファイルに問題があります。
表1:
<class entity-name="CompPkTest" table="compPkTest" catalog="data" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<composite-id mapped="false" unsaved-value="undefined">
<key-property name="id1" type="int">
<column name="id1"/>
</key-property>
<key-property name="id2" type="int">
<column name="id2"/>
</key-property>
</composite-id>
<property name="details" type="string" unique="false" optimistic-lock="true" lazy="false" generated="never">
<column name="Details" length="500"/>
</property>
<one-to-one name="CompPkTestDetail" entity-name="CompPkTestDetail" constrained="false" embed-xml="true"/>
表 2:
<class entity-name="CompPkTestDetail" table="compPkTestDetail" catalog="data" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<composite-id mapped="false" unsaved-value="undefined">
<key-property name="idetail1" type="int">
<column name="idetail1"/>
</key-property>
<key-property name="idetail2" type="int">
<column name="idetail2"/>
</key-property>
</composite-id>
<one-to-one name="CompPkTest" entity-name="CompPkTest" constrained="true" embed-xml="true"/>
<property name="someDetail" type="string" unique="false" optimistic-lock="true" lazy="false" generated="never">
<column name="someDetail" length="300"/>
</property>
<property name="moreDetail" type="string" unique="false" optimistic-lock="true" lazy="false" generated="never">
<column name="moreDetail" length="300"/>
</property>
問題は、テーブル 1 を照会するときに「詳細」プロパティが null になることです。CompPkTestDetail のキー プロパティ名を id1 と id2 に変更すると (列名は変更せずに)、関係は期待どおりに機能し、クエリは "details" の値を返します。
私の質問:
上記のマッピング xml は、(一致しないフィールド名で) この関連付けを行う正しい方法ですか?
フィールド名が一致しなければならないことを強制するのに休止状態は正しいですか、それともバグですか?
私のアプリケーションにはエンティティのクラスがなく、休止状態がマップモードになっていることに注意してください。私のアプリケーションは (任意の) データベースに完全に動的にアクセスできるため、マッピングの xml は実行時に生成されます。