您的映射对我来说很奇怪。关系的两边都有一个@JoinColumn,每个都指向另一个表的主键。那似乎不是一对多的关系。
您的OneToMany应该告诉关系的所有者:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "whoDoneAteMe")
public List<Hamburger> getHamburgers() {
return hamburgers;
}
然后在另一边:
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "fatkid_id")
public FatKid getWhoDoneAteMe() {
return whoDoneAteMe;
}
您也许也可以进一步优化代码。由于您的FatKid对象可以识别Hamburger对象,并且已经配置了级联,因此您可以执行以下操作:
session.beginTransaction();
FatKid fk = new FatKid();
fk.setName("Darrell");
Hamburger hamburger_1 = new Hamburger();
hamburger_1.setDescription("Juicy quarter pounder with cheese");
hamburger_1.setWhoDoneAteMe(fk);
fk.getHamburgers().add(hamburger1);
Hamburger hamburger_2 = new Hamburger();
hamburger_2.setDescription("Ground buffalo burger topped with bacon and a sunny-side egg");
hamburger_2.setWhoDoneAteMe(fk);
fk.getHamburgers().add(hamburger2);
session.save(fk);
session.getTransaction().commit();
sessionFactory.close();
上面的代码应仅通过一次提交操作并在单个事务中保存完整的对象图。