Java 合并在JPA上下文中不起作用

Java 合并在JPA上下文中不起作用,java,jpa,Java,Jpa,这是我的简单代码: public static void main(String[] args) { EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("main"); EntityManager entityManager = entityManagerFactory.createEntityManager();

这是我的简单代码:

 public static void main(String[] args) {
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("main");
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();

        Team team1 = entityManager.find(Team.class, 0);
        System.out.println(entityManager.contains(team1));

        Team team2 = new Team();
        System.out.println(entityManager.contains(team2));

        entityManager.detach(team1);
        System.out.println(entityManager.contains(team1));

        entityManager.merge(team1);
        System.out.println(entityManager.contains(team1));

        transaction.commit();
        entityManager.close();
    }
输出为:

true
false
false
false

查看最后一个
false
,它应该是true,因为我将该实体合并到了实体管理器中。知道它为什么给出false吗?

实体管理器将返回新实例:

team1 = entityManager.merge(team1)
3.2.4.1合并分离实体状态 合并操作允许 分离态的传播 将实体转换为持久实体 由EntityManager管理

合并操作的语义 适用于实体X的参数如下:

  • 如果X是分离的实体,则X的状态将复制到预先存在的实体上 同一实体的托管实体实例X' 标识或X的新托管副本X' 是创建的
  • 如果X是一个新的实体实例,则会创建一个新的托管实体实例X' X的状态被复制到 新的托管实体实例X'
  • 如果X是一个已删除的实体实例,则将生成一个
    IllegalArgumentException
    由合并操作(或 事务提交将失败)
  • 如果X是托管实体,则合并操作将忽略它, 但是,合并操作是无效的 级联到引用的实体 来自X的关系,如果这些 已使用注释对关系进行了注释 级联元素值
    cascade=MERGE
    cascade=ALL
    注释
  • 对于X中关系引用的所有实体Y,具有 级联元素值
    cascade=MERGE
    cascade=ALL
    ,Y递归合并 如“Y”。对于所引用的所有此类Y 十、 X'设置为参考Y'。(注 如果X被管理,那么X就是 与X'相同的对象。)
  • 如果X是一个合并到X'的实体,并引用另一个实体Y,其中
    cascade=MERGE
    cascade=ALL
    是 未指定,则为 X'的相同关联产生a 对托管对象Y'的引用,带有 与Y相同的持久标识

team1=entityManager.merge(team1)这能解决您的问题吗?@AkifHadziabdic是的,可以!谢谢:)请随意写一个答案。