我已阅读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);
谁能告诉我我所缺少的吗?
我需要先保存父母,然后添加孩子并再次保存吗?
谢谢。
最佳答案
您必须添加@OneToMany(cascade=CascadeType.PERSIST)
。您还可以使用CascadeType.ALL
,其中包括持久,合并,删除...
级联是一种设置,该设置告诉休眠状态,当拥有/合并/删除拥有实体时,该如何处理集合元素。
默认情况下,它对它们不执行任何操作。如果设置了各自的级联类型,则它将为为父级调用的集合元素调用相同的操作。