Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中的传递持久性顺序_Java_Hibernate_Jpa - Fatal编程技术网

Java hibernate中的传递持久性顺序

Java hibernate中的传递持久性顺序,java,hibernate,jpa,Java,Hibernate,Jpa,我有两个父类A、C和两个子类:B、D。这两个关系都启用了传递持久性。然而,持久化D需要B持久化 class A { @OneToMany(cascade = {CascadeType.PERSIST}, mappedBy = "a") public Set<B> getBs() { ... } } class B { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "a_i

我有两个父类A、C和两个子类:B、D。这两个关系都启用了传递持久性。然而,持久化D需要B持久化

class A {
    @OneToMany(cascade = {CascadeType.PERSIST}, mappedBy = "a")
    public Set<B> getBs() {
     ...
    }
}

class B {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "a_id", nullable = false)
    public A getA() {
      ...
    }
}

class C {
    @OneToMany(cascade = {CascadeType.PERSIST}, mappedBy = "c")
    public Set<D> getDs() {
       ...
    }
}

class D {
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "b_id", nullable = false)
    public B getB() {
      ...
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "c_id", nullable = false)
    public C getC() {
      ...
    }
}
我想这应该是可能的。然而,我得到一个TransientObjectException,告诉我B在试图保存D时需要持久化


hibernate处理级联关系是否有特定的顺序?

当您刷新时,由于从C到d的级联,d变得持久化。但是没有从d到B的级联,因此hibernate抱怨。A需要在D之前刷新才能工作,但没有理由在A和D之间有任何特定的顺序

A a = entityManager.getReference(...);
C c = entityManager.getReference(...);

B b = new B();

D d = new D();
d.setB(b);

a.add(b);
b.setA(a);

c.add(d);
d.setC(c);

entityManager.flush();