在数据库中添加NULL

时间:2013-08-29 09:35:26

标签: java mysql hibernate mapping hibernate-onetomany

我是hibernate的新手。
我有两个类UserDetails和Address。这两个类是一对多的关系。详情如下(Skiping getter and setters)
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>();
}

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”设置为更新 运行上面的代码之后,数据库中的条目是

UserDetails表

userId       UserName     Address
1            User 1       NULL

地址表

Id      City    Address
1       Pune    1
2       NULL    1

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

2 个答案:

答案 0 :(得分:1)

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查看正确的方法

答案 1 :(得分:0)

<强>第一

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

UserDetails表

Id UserName Address 1 User 1 NULL

标识列的两个冲突列名称不同,应该是userId而不是id。在java文件或数据库中更正。

第二次

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

这将设置ad1的城市而不是ad2。但是,在对城市列进行空检查之前,这不会有任何影响。