Java hibernate中的传递持久性顺序
我有两个父类A、C和两个子类:B、D。这两个关系都启用了传递持久性。然而,持久化D需要B持久化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
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();