我是新来的冬眠。
我有两个类UserDetails和Address,两者之间的关系是一对多,详细信息如下(跳过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中,将属性名=“ hbm2ddl.auto”设置为更新
运行以上代码后,数据库中的条目为

用户详细信息表

userId       UserName     Address
1            User 1       NULL


地址表

Id      City    Address
1       Pune    1
2       NULL    1


我的问题是,为什么休眠状态在地址表中的UserDetails Address = NULL和City = NULL中插入,而不是创建新表。

最佳答案

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


您将城市pune设置为address1,而不是address2尝试将其更改为

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


更新

您的用户表adrees列为null,因为在pojo中没有用于地址的映射字段,无论如何,您的数据库模式设计方式实现了onetomany关系是错误的。请在此处One to Many Hibernate检查正确的方法

10-06 13:07
查看更多