我是 hibernate 新手。
我有两个类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 中,属性 name="hbm2ddl.auto"设置为更新 运行上面的代码后,数据库中的条目为
用户详细信息表
userId UserName Address
1 User 1 NULL
地址表
Id City Address
1 Pune 1
2 NULL 1
我的问题是为什么 hibernate 在地址表中插入 UserDetails Address=NULL 和 City=NULL 而不是创建新表。
最佳答案
Address ad2=new Address();
ad1.setCity("Pune");
您正在将城市pune
设置为address1
,而不是address2
尝试将其更改为
Address ad2=new Address();
ad2.setCity("Pune");
更新
您的用户表 adrees 列为空,因为您的 pojo 中没有用于地址的映射字段,无论如何,您的数据库架构设计方式在实现一对多关系时是错误的。请查看这里One to Many Hibernate正确的方法
关于java - 数据库中添加NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18507255/