d1Id という一意の ID を持つ D1 というメイン テーブルがあります。d1Id は D1 レコードを一意に識別し、テーブルの主キーでもあります。主キーとして d2seq を持つ D2 であるテーブル 2 がありますが、D2 には、D1 に外部キー制約 (私が思う) を持つ一意の d1Id もあります。しかし、それが一意であり、IDが同じであることは確かです。休止状態を使用して D1 呼び出しを行うときに d2 値を取得しようとしていますが、コンパイル時にエラーが発生するため、適切な hbm を取得できません。
問題の要点は、2 つのテーブル間に 1 対 1 の関係を確立する必要があることです。2 番目のテーブルでは、結合する ID がテーブルの主キーではありません。Google を検索して見たすべての例には、2 番目のテーブルの ID が 2 番目のテーブルの主キーでもある場合があります。私が今持っている HBM ファイルをお見せしましょう。
<hibernate-mapping default-lazy="true"
package="com.xxx.xx.customer.dto">
<class name="D1" table="D1" dynamic-update="true">
<id name="dString" column="DID" type="java.lang.String"
unsaved-value="null" length="9">
<generator class="assigned"/>
</id>
...
<one-to-one name="d2" class="com.xxx.xx.customer.dto.D2" >
<!-- column name="d1Id" /-->
</one-to-one>
D2 の 2 番目の hbm で、ここで立ち往生しています
<hibernate-mapping default-lazy="true" package="com.xxx.xx.customer.dto">
<class name="D2" table="D2" dynamic-update="true">
<id name="id" column="D2ID" type="integer">
<generator class="native">
<param name="sequence">D2SEQ</param>
</generator>
</id>
<id name="d1id" column="D1ID" type="java.lang.String"
unsaved-value="null" length="9">
<generator class="assigned"/>
</id>
ここで d1id の 2 番目の id フィールドを使用できないのは明らかです。なぜなら、1> これは主キーではなく、2> 以前に使用したことがあるからです。では、この操作では HBM ファイルをどのようにすべきでしょうか?
また、HBM を配置したら、DTO を介して D1 にクエリを実行しながら、D2 情報を取得したいと考えています。どうやってやるの?