提问者:小点点

如何在hibernate中将自动生成的父表id添加到子表中


我有两个类/表作为Availability(父)和AvailabilityDate(子)。 但是我的问题是,当我插入一个记录时,我可以在两个表中看到记录,但是我没有看到外键列(availability_id)有一个值。

这就是我如何创建与子表的关系

@Entity
@Table(name="availability")
public class Availability {

    @Id
    @Column(name="availability_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int availabilityID;

    @OneToMany(mappedBy="availability", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private Set<AvailabilityDate> availabilityDateSet;

}

这就是我如何建立与父表的关系

@Entity
@Table(name="availability_date")
public class AvailabilityDate {

@Id
    @Column(name="availability_date_id", nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int availabilityDateID;

    @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
    @JoinColumn(name="availability_id", referencedColumnName = "availability_id")
    private Availability availability;

}

这就是我如何使用Java代码插入记录

session = this.sessionFactory.openSession();
tx = session.beginTransaction();
session.persist(availability);
tx.commit();
session.close();

具有数据的可用性对象

{
  
  "availabilityName" : "test test 1",
  "availabilityDateSet" : [ {
    
    "availability" : null,
    "availabilityDate" : null,
    "availabilityType" : "FRIDAY",
    "fromTimeString" : "05:30",
    "toTimeString" : "13:30"
  }, {
    
    "availability" : null,
    "availabilityDate" : null,
    "availabilityType" : "SUNDAY",
     "fromTimeString" : "08:30",
    "toTimeString" : "15:30"
  } ]
}

插入后的数据

表格说明


共1个答案

匿名用户

你用错了交易。 应在对数据库进行操作后关闭:

session = this.sessionFactory.openSession();
tx = session.beginTransaction();
session.persist(availability);
tx.commit();

当然,还有更多的样板-sessiontransaction都需要关闭,后者应该完全在前者之内。