【问题标题】:Transitive persistence order in hibernate休眠中的传递持久性顺序
【发布时间】:2011-12-02 21:54:08
【问题描述】:

我有 2 个父类 A、C 和 2 个子类: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() {
      ...
    }
}

我正在尝试一次性保存 B 和 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();

我认为这应该是可能的。但是,我得到一个 TransientObjectException,告诉 B 在尝试保存 D 时需要保持持久性。

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

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2018-09-09
      • 2010-10-29
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多