繁体   English   中英

当我尝试删除实体时,必须管理实体以调用remove

[英]Entity must be managed to call remove when I try to delete an entity

我有这个方法来删除列表中选择的实体。 但是当被调用时会产生这个错误,我看不出原因。

java.lang.IllegalArgumentException:必须管理实体以调用remove: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();
    }

我已经阅读了其他相关帖子

必须管理实体以调用删除

IllegalArgumentException:必须管理实体以调用remove

如果未附加实体,则无法删除该实体。 如果实体仍然附加,您可以按原样删除它。 如果它不再附加,您可以使用merge重新附加它:

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

em.remove(stock);

您从实体中分离实体,然后将其删除。 那不行。

尝试删除em.detach(stock); 并将一些实体传递给保证附加到会话的方法,即从DB中获取内容然后立即删除它。 如果可行,那么您正在以错误的方式使用您的方法,很可能是使用分离的或刚刚创建的实体。

去除

em.detach(stock);

detach从entityManager中删除您的实体

为什么要分离物体? 如果参数不是实体对象,则抛出IllegalArgumentException。 如果参数库存由实体管理器管理,则删除分离行,否则合并实体。

尝试这个:

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();
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM