JPA实体在不同的实体经理之间共享

时间:2012-07-09 15:44:15

标签: 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.flush();
    
  • 如果在第一行和第二行之间插入行em1.detach(entityA);,答案是否会改变? (或者换句话说:不同实体经理之间允许共享分离实体

1 个答案:

答案 0 :(得分:0)

  • 不,多个EntityManager
  • 不允许单个实体托管
  • 是的,如果你有一个分离的实体,则允许另一个EntityManager进行托管,例如,使用merge()

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

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