我尝试了上面的方法,但是我收到一个数据库错误,抱怨Child表中的外键字段不能为NULL。是否可以告诉JPA自动将此外键设置为Child对象,以便它可以自动保存child对象?
好吧,这里有两件事。
首先,您需要级联保存操作(但是我的理解是您正在执行此操作,否则在“子”表的插入过程中不会收到FK约束违规)
其次,您可能具有双向关联,并且我认为您没有正确设置“链接双方”。您应该做这样的事情:
Parent parent = new Parent();...Child c1 = new Child();...c1.setParent(parent);List<Child> children = new ArrayList<Child>();children.add(c1);parent.setChildren(children);session.save(parent);
一种常见的模式是使用链接管理方法:
@Entitypublic class Parent { @Id private Long id; @oneToMany(mappedBy="parent") private List<Child> children = new ArrayList<Child>(); ... protected void setChildren(List<Child> children) { this.children = children; } public void addToChildren(Child child) { child.setParent(this); this.children.add(child); }}代码变成:
Parent parent = new Parent();...Child c1 = new Child();...parent.addToChildren(c1);session.save(parent);
参考文献
- Hibernate Core参考指南
- 1.2.6。工作双向链接



