我有两个类/表作为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"
} ]
}
插入后的数据
表格说明
你用错了交易。 应在对数据库进行操作后关闭:
session = this.sessionFactory.openSession();
tx = session.beginTransaction();
session.persist(availability);
tx.commit();
当然,还有更多的样板-session
和transaction
都需要关闭,后者应该完全在前者之内。