如何使用Spring数据JPA保存双向关联而不进行级联?

时间:2014-09-17 14:37:56

标签: java spring hibernate jpa

假设我在Parent-Child之间具有双向一对多关联,映射如下:

Parent.java:

@Entity
public class Parent {

    @Id
    private Integer id;

    @OneToMany(mappedBy = "parent")
    private List<Child> childs = new ArrayList<>();
    ...

和Child.java:

@Entity
public class Child {

    @Id
    private Integer id;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private Parent parent;

    ...

当我运行此代码时

    Parent parent = new Parent(1);
    Child child = new Child(1);
    Child child2 = new Child(2);
    child.setParent(parent);
    child2.setParent(parent);
    parent.getChilds().add(child);
    parent.getChilds().add(child2);

    parentRepository.save(parent);

我得到例外

    Unable to find Child with id 1

先保存孩子也无济于事,只有例外情况不同

2 个答案:

答案 0 :(得分:1)

尝试

@OneToMany(mappedBy = "parent", cascade={CascadeType.PERSIST})
private List<Child> childs = new ArrayList<>();

(另请参阅JPA @ManyToOne with CascadeType.ALL

答案 1 :(得分:0)

我很抱歉发布了一个不确定的答案,但我不能发表评论的声誉。 我认为你有一个交叉引用问题,因为只需引用子进程中的父进程就可以通过简单查询获得父进程的子进程。相反,您交叉引用子关联导致许多对象问题。如果你愿意,我可以给你发一个类图,以便更好地解释。希望它有所帮助