1
  • 根据 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);如果在第一行和第二行之间插入行,答案会改变吗?(或者换句话说:是否允许在不同的实体管理器之间共享分离的实体)

4

1 回答 1

0
  • 不,不允许单个实体多个EntityManagers管理
  • 是的,如果您有一个分离的实体,则可以让它由另一个管理EntityManager,例如,使用merge()

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

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

于 2012-07-09T16:20:10.540 回答