gpt4 book ai didi

java - 不同实体管理器之间共享 JPA 实体

转载 作者:行者123 更新时间:2023-12-01 05:14:59 24 4
gpt4 key购买 nike

  • 根据 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管理
  • 是的,如果您有一个分离实体,则可以将其由另一个EntityManager管理,例如使用合并()

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

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

关于java - 不同实体管理器之间共享 JPA 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11398527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com