0

私は冬眠するのが初めてです。
UserDetails と Address の 2 つのクラスがあります。これら 2 つの関係は One-To-Many です。詳細は次のとおりです (getter と setter をスキップ)
UserDetails.java

@Entity
@Table(name = "UserDetails")
public class UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "userId")
    private int userId;

    @Column(name = "UserName")
    private String userName;

    @OneToMany
    @JoinColumn(name = "address")
    private Collection<Address> address = new ArrayList<Address>();
}

アドレス.java

@Entity
@Table(name = "address")
public class Address {
    @Id
    @GeneratedValue
    @Column(name = "id")
    private int id;
    @Column(name = "city")
    private String city;
}

App.java

UserDetails ud=new UserDetails();
ud.setUserName("User 1");

Address ad1=new Address();
ad1.setCity("Mumbai");

Address ad2=new Address();
ad1.setCity("Pune");

ud.getAddress().add(ad1);
ud.getAddress().add(ad2);

Session session=factory.openSession();
session.beginTransaction();
session.save(ud);
session.save(ad1);
session.save(ad2);


session.getTransaction().commit();
session.close();

hibernate.cfg.xml プロパティ name="hbm2ddl.auto" で update に設定されています 上記のコードを実行した後、データベースのエントリは

UserDetails テーブル

userId       UserName     Address
1            User 1       NULL

アドレス テーブル

Id      City    Address
1       Pune    1
2       NULL    1

私の質問は、休止状態が、新しいテーブルを作成する代わりに、アドレス テーブルの UserDetails Address=NULL および City=NULL に挿入する理由です。

4

2 に答える 2

1
Address ad2=new Address();
ad1.setCity("Pune");

都市puneを次のように変更するaddress1のではなく、に設定していますaddress2

 Address ad2=new Address();
    ad2.setCity("Pune");

アップデート

pojoにアドレス用のマップされたフィールドがないため、ユーザーテーブルのadrees列はnullです。とにかく、データベーススキーマの設計方法が間違っており、1対多の関係を実装しています。適切な方法については、ここで1 対多の Hibernateを確認してください。

于 2013-08-29T09:42:04.917 に答える
0

1位

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "userId")
private int userId;

UserDetails テーブル

Id ユーザー名 アドレス 1 ユーザー 1 NULL

ID 列の両方の競合列名が異なります。id ではなく userId である必要があります。Java ファイルまたはデータベースで修正してください。

2位

Address ad2=new Address();
ad1.setCity("Pune");

これにより、ad2 ではなく ad1 の都市が設定されます。しかし、これは市の列で null チェックが行われるまで影響しません。

于 2013-08-29T09:47:07.013 に答える