根据 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);
,答案会改变吗? (或者换句话说:不同实体管理器之间是否允许共享分离实体)
最佳答案
- 不可以,单个实体不允许由多个
EntityManager
管理 - 是的,如果您有一个分离实体,则可以将其由另一个
EntityManager
管理,例如使用合并()
但是,在您的情况下,EntityManager
应该抛出异常,因为不允许将 persist()
(在您的情况下,通过级联)应用于分离的实体。您应该删除级联选项或使用 merge()
而不是 persist()
。
如果您删除级联,我认为即使没有 detach()
也可以运行此代码,因为在这种情况下 entityA
不会由 em2
。
关于java - 不同实体管理器之间共享 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398527/