在新实体中保存映射集合

时间:2011-05-10 08:00:53

标签: java hibernate one-to-many

我已阅读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);

有谁能告诉我我错过了什么?

我是否需要先保存父级,然后添加子级并再次保存?

感谢。

1 个答案:

答案 0 :(得分:2)

您必须添加@OneToMany(cascade=CascadeType.PERSIST)。您还可以拥有CascadeType.ALL,其中包括持久,合并,删除...

Cascading是一个设置,它告诉hibernate在拥有/合并/删除拥有实体时如何处理集合元素。

默认情况下,它不会对它们起任何作用。如果设置了相应的级联类型,它将为为父级调用的集合元素调用相同的操作。