これらの 2 つのエンティティがある場合:
@Entity class A {
@OneToOne(cascade = CascadeType.MERGE, mappedBy = "a") B b;
//getters+setters
}
@Entity class B {
@OneToOne(cascade = CascadeType.MERGE) A a;
//getters+setters
}
JPA仕様はこれを保証していますか?
A a = new A();
B b = new B();
a.setB(b);
b.setA(a);
A managedA = entityManager.merge(a);
// after commit, managedA will have a reference to a managed B which JPA implementation will link to managedA instead of original unmanaged A
Assert.assertTrue(managedA.getB().getA() == managedA);
私の理解では、(少なくとも最新の EclipseLink では、少なくとも時々) 動作しますが、仕様ではそれが保証されていません。
反例/仕様の抜粋を歓迎します:-)