2

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 情報を取得したいと考えています。どうやってやるの?

4

1 に答える 1

0

@ManyToOneなぜ関係を使用できないのですか?多くの場合、より柔軟性が高くなります。@OneToOne

于 2013-03-28T21:31:43.470 に答える