2012-07-09 69 views
1
  • 之间JPA实体共享是它根据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
  • 不,它是不允许有一个单一的实体由多个EntityManager小号
  • 管理是,如果你有一个分离的实体,则允许它通过另一个EntityManager管理管理,例如,使用merge()

但是,在你的情况下,EntityManager应该抛出一个异常,因为不允许将persist()(在你的情况下,通过级联)应用到分离的实体。您应该删除级联选项或使用merge()而不是persist()

如果您删除级联,我认为即使没有detach()也可以运行此代码,因为在这种情况下,entityA不会由em2管理。