2011-10-18 12 views
0

私は彼の住所とともに人を救おうとしています。私はpersonとaddressの間に1対1のマッピングを持っています.Personクラスはアドレスのインスタンスを持っています。人テーブルアドレステーブルを作成したときにも作成されました。ここまで問題はありません。私は人を保存しようとすると、アドレスがsaved.Hereが私のマッピングファイルである休止状態で1対1の関連付けを保存しますか?

<hibernate-mapping> 

    <class name="com.daasl.Person" table="person"> 
    <id name="id" type="int"> 
    <generator class="increment"/> 
    </id> 

    <property name="name" column="cname" type="string"/> 
    <one-to-one name="address" class="com.daasl.Address"/> 
    </class> 


<class name="com.daasl.Address" table="Address"> 
    <id name="id" type="int"> 
    <generator class="increment"/> 
    </id> 
    <property name="personId" type="int"/> 
    <property name="addressLine1" type="string"/> 

</class> 

</hibernate-mapping> 

を取得していないですが、私は、人への外部キーとしてアドレステーブルで、ここでの外部キー関係(基本的に私は人のidをしたいの作成方法がわかりませんテーブル)、私は人のテーブルにデータを保存すると、アドレスもあまりにも今起こっていない保存する必要があります。同様に私はまた、アドレスのデータを取得する必要があります

+1

私達にあなたのコードを表示します。しかし確かなことは、あなたはpersonId(int)フィールドをアドレスに持つべきではなく、person(またはPerson型)フィールドを持つべきであるということです。これは、1対1の逆の関係になります。 http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#assoc-bidirectional-join-121 –

答えて

3

あなたの1対1の関係は大丈夫ですか?関連付けられた人物を保存したときに住所が保存されない場合は、おそらくcascadingを設定していない可能性があります。

デフォルトでは、Hibernateはカスケードを実行しないため、Personだけが保存され、関連するエンティティは保存されません。

<one-to-one name="address" class="com.daasl.Address" cascade="save-update"/> 

あなたのPerson-> Address関係にしてください。

カスケードの種類は、Personエンティティで実行している操作(保存、更新など)によって異なります。上記のリンクに従って、このような操作に関連したさまざまなタイプのカスケーディングがあります - あなたのニーズに合ったものを使用してください。

+0

Thanks Gonzaloを読んでください。アドレステーブルにもデータが保存されています。しかし、私が直面している2つの問題は、1)データはアドレステーブルの中に入っていますが、アドレステーブルのpersonidはpersonテーブルのpersonidのforign keyです。上記のhbmファイルで外部キー関係を定義する方法はわかりません.2) Person p1 =(Person)セッション。 get(Person.class、1); iamはプロキシを期待しています.p1.getNameを実行すると、実際のデータがロードされるはずです。偶数アドレスの関連付けは熱心に読み込まれます(デフォルトでは、休止状態のサポートは遅延ロードをサポートしています)。なぜこれがこのように起こっているのでしょうか? –

+0

「1)データは、アドレステーブル内に行くが、アドレステーブルにPERSONIDている人にPERSONIDする外部キーは、上記のHBMファイルに外部キー関係を定義する方法がわからtable.Notである」あなたがここで定義したい わかりません。もう少し詳しく説明できますか?それにもかかわらず、私は離れてあなたのエンティティのフィールドとして外部キー列を定義するとどまります。住所の人物への参照をしたい場合、私はOneToOneとして住所に関係の反対側を定義します。また、エンティティを表示できますか?最後に、XMLではなく注釈を使用しない特定の理由はありますか? –

+0

ゴンサロannotation.Iを使用していない特定の理由はありませんが休止状態に新しいです。だから、XMLは基本の理解に役立ちますが、私はアノテーションを有効にするためにいくつかの設定を行う必要がありますか、それともすぐに使用することができますか? –

関連する問題