2011-10-19 3 views
3

PersonAddressという2つのテーブルがあります。これらのテーブルは、と1対多のを、アノテーションを使ってhibernateでマッピングしました。1対多の単方向ハイバネーションマッピングは子テーブルを保存しません

私の親エンティティPerson私はSet<Address>を作成して子クラスを保持します。その後、アドレスのセットを作成し、Personエンティティに設定し、Personの独自の値も設定します。

私の問題は、親エンティティを保存するときに、子がDBに保存しないということです。

Person.java

@Entity 
@Table(name="PERSON") 
public class Person { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name="personId") 
    private int id; 
    @Column(name="personName") 
    private String name; 
    @OneToMany(cascade =CascadeType.ALL,fetch = FetchType.EAGER) 
    @JoinColumn(name="personId") 
    private Set <Address> addresses; 

Address.java

@Entity 
@Table(name = "ADDRESS") 
public class Address { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "addressId") 
    private int id; 
    @Column(name = "address") 
    private String address; 
    @Column(name="personId") 
    private int personid; 

マイDAO:

public Person addNewPerson() { 
    Person per = new Person(); 
    per.setName("aaaa person"); 
    Set<Address> addressSet = new HashSet<Address>(); 
    for(int i = 0; i<=3;i++){ 
     Address ad = new Address(); 
     ad.setAddress("aaa "+i); 
     addressSet.add(ad); 

    } 
    per.setAddresses(addressSet); 
    getHibernateTemplate().save(per); 
    } 
ここ

は私のコードです

ここで人は私のテーブルに追加していますが、アドレスは保存されません。どうして?

双方向それは可能であるが、単方向で私personId列が二回マッピングされている問題

答えて

3

です:通常のintとして一度JoinColumn注釈を使用して、アドレスの人への外部キーを保持するために、一度、および住所の列。

アドレスからpersonIdフィールドを削除します。住所から人物IDにアクセスする場合は、双方向のOneToMany/ManyToOneの関連付けとして関連付けをマップします。

+0

私はaddressからpersonIdを削除してから上記の手順を繰り返します – jaleel

+0

あなたは1つのアプリケーションを提案できますか? – jaleel

+0

申し訳ありませんが正常に動作しています。 – jaleel

関連する問題