我已阅读documentation,并认为我可以执行以下操作....
将我的课程映射为(这确实有效)
@Entity
public class ParentEntity
{
...
@OneToMany(mappedBy = "parent")
private List<ChildEntity> children;
...
}
@Entity
public class ChildEntity
{
...
@Id
@Column
private Long id;
...
@ManyToOne
@NotFound(action = NotFoundAction.IGNORE)
@JoinColumn(name = "parent_id")
private ParentEntity parent;
...
}
..但我希望能够一次性插入两个表,并认为这样可行:
parent = new ParentEntity();
parent.setChildren(new ArrayList<ChildEntity>());
ChildEntity child = new ChildEntity();
child.setParent(parent);
parent.getChildren().add(child);
session.persist(parent);
有谁能告诉我我错过了什么?
我是否需要先保存父级,然后添加子级并再次保存?
感谢。
答案 0 :(得分:2)
您必须添加@OneToMany(cascade=CascadeType.PERSIST)
。您还可以拥有CascadeType.ALL
,其中包括持久,合并,删除...
Cascading是一个设置,它告诉hibernate在拥有/合并/删除拥有实体时如何处理集合元素。
默认情况下,它不会对它们起任何作用。如果设置了相应的级联类型,它将为为父级调用的集合元素调用相同的操作。