我是新来的冬眠。
我有两个类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检查正确的方法