考虑以下关系:
实体A与实体B具有双向一对多关系。 实体A与实体C具有单向一对一的关系。 实体C与实体D具有双向一对多关系。 实体B与实体D具有双向一对多关系。
然后
A a =new A();
B b =new B();
C c =new C();
D d =new D();
List<B> bs=new ArrayList<>();
bs.add(b);
a.setBs(bs);
b.setA(a);
a.setC(c);
List<D> ds=new ArrayList<>();
ds.add(d);
b.setDs(ds);
d.setB(b);
c.setDs(ds);
d.setC(c);
所有关系都有级联合并
em.merge(a);
调用merge psql(引发PostgreSQL异常)时说明插入d是不可能的,因为b不存在(约束违规)。 似乎 a 持久/插入比 c 持久/插入比eclipse链接试图插入 d 而 b 仍然 b 没有插入。 如何解决这样的问题,知道所有这一切都必须在同一个交易中发生。