【问题标题】:Entity must be managed to call remove when I try to delete an entity当我尝试删除实体时,必须管理实体调用 remove
【发布时间】:2015-06-28 19:35:06
【问题描述】:

我有这个方法可以删除列表中选择的实体。但是当被调用时会产生这个错误,我不明白为什么。

java.lang.IllegalArgumentException:必须管理实体才能调用 删除:HP Envy 15,尝试合并分离的并再次尝试删除。

public void delete(Stock stock){
        EntityManager em = ConnectionFactory.createEntityManager();
        em.getTransaction().begin();
        em.detach(stock);
        em.remove(stock);
        em.getTransaction().commit();        
        em.close();
    }

我已阅读其他相关帖子

Entity must be managed to call remove

IllegalArgumentException: Entity must be managed to call remove

【问题讨论】:

    标签: java jpa jpql


    【解决方案1】:

    如果实体未附加,您将无法移除它。如果实体仍处于附加状态,您可以按原样将其移除。如果不再附加,您可以使用merge 重新附加它:

    if (!em.contains(stock)) {
        stock = em.merge(stock);
    }
    
    em.remove(stock);
    

    【讨论】:

    • 谢谢,我没有看到 em.deach 行(股票)按照建议更改了代码并且它起作用了
    【解决方案2】:

    非常感谢各位 你帮助我治愈了我的头痛 这是纠正错误后的代码

    EntityManager em = ConnectionFactory.createEntityManager();
    em.getTransaction().begin();
    if (!em.contains(stock)) {
        current = em.merge(stock);
    }
    em.remove(current);
    em.getTransaction().commit();
    em.close();
    

    【讨论】:

      【解决方案3】:

      您从会话中分离实体,然后将其删除。那是行不通的。

      尝试删除em.detach(stock); 并将一些实体传递给保证附加到会话的方法,即从数据库中获取某些内容,然后立即将其删除。如果这样可行,则说明您使用方法的方式有误,很可能是使用分离的或刚刚创建的实体。

      【讨论】:

        【解决方案4】:

        删除

        em.detach(stock);
        

        detach 会从 entityManager 中移除你的实体

        【讨论】:

          【解决方案5】:

          为什么要分离对象?如果参数不是实体对象,则分离会引发 IllegalArgumentException。 如果参数 stock 由实体管理器管理,则删除分离线,否则合并实体。

          试试这个:

          public void delete(Stock stock){
                  EntityManager em = ConnectionFactory.createEntityManager();
                  em.getTransaction().begin();
                  Stock mStock2 = em.merge(stock);
                  em.remove(mStock2);
                  em.getTransaction().commit();        
                  em.close();
              }
          

          【讨论】:

            猜你喜欢
            • 2012-03-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-27
            • 2015-07-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多