Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不同实体经理之间的JPA实体共享_Java_Jpa_Eclipselink - Fatal编程技术网

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

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

根据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
        s管理单个实体
      • 是的,如果您有一个分离的实体,则允许它由另一个
        EntityManager
        管理,例如,使用
        merge()
      但是,在您的情况下,
      EntityManager
      应该抛出一个异常,因为它不允许将
      persist()
      (在您的情况下,通过级联)应用于分离的实体。您应该删除级联选项或使用
      merge()
      而不是
      persist()

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