Java 不同实体经理之间的JPA实体共享
根据JPA 2.0规范,是否允许在两个不同的实体经理之间共享一个实体,例如,通过以下方式:Java 不同实体经理之间的JPA实体共享,java,jpa,eclipselink,Java,Jpa,Eclipselink,根据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.f
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),答案是否会改变代码>将插入第一行和第二行之间?(或者换句话说,是否允许在不同的实体经理之间共享分离的实体)
- 不,不允许由多个
s管理单个实体EntityManager
- 是的,如果您有一个分离的实体,则允许它由另一个
管理,例如,使用EntityManager
merge()
EntityManager
应该抛出一个异常,因为它不允许将persist()
(在您的情况下,通过级联)应用于分离的实体。您应该删除级联选项或使用merge()
而不是persist()
如果删除级联,我认为即使不使用detach()
,也可以运行此代码,因为在这种情况下entityA
不会由em2
管理