是否允许根据JPA 2.0规范在两个不同的实体经理之间共享实体,例如通过以下方式:
A entityA = em1.find(entityA.class,1L);
B entityB = new entityB();
b.setA(entityA); //entityB refers to entityA via @ManyToOne reference, cascade=CascadeType.PERSIST is enabled
em2.persist(entityB);
em2.flush();
如果在第一行和第二行之间插入行em1.detach(entityA);
,答案是否会改变? (或者换句话说:不同实体经理之间允许共享分离实体)
答案 0 :(得分:0)
EntityManager
EntityManager
进行托管,例如,使用merge()
但是,在您的情况下,EntityManager
应抛出异常,因为不允许将persist()
(在您的情况下,通过级联)应用于分离的实体。您应该删除级联选项或使用merge()
而不是persist()
。
如果您删除级联我认为即使没有detach()
也可以运行此代码,因为在这种情况下entityA
不会由em2
管理。