java - 数据库中添加NULL

标签 java mysql hibernate mapping hibernate-onetomany

我是 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/

相关文章:

java - 期望这两个 CompletableFutures 得到相同的结果

java - .equals() 和 == in Java on Integer(== 有效但 .equals 无效!!)

java - 如何向 Micronaut 项目添加第二个数据源?

java - 如何在 SimpleJpaRepository 中执行 order_by?

java - JPA 可插入 = false 可更新 = false 创建时未更新 id

java - 如何计算点数组列表的质心

java - 在Java中,原始静态变量和静态函数存储在哪里?

java - 了解了 Dao 模式,它可以用于从缓存中检索数据吗?

mysql - 根据mysql中另一个表中的值更新一个表中的多个列

php - sql时间戳无法显示正确的时间