当我尝试删除实体时,必须管理实体以调用删除
Entity must be managed to call remove when I try to delete an entity
我有这个方法来删除列表中选择的实体。但是当被调用时会产生这个错误,我不明白为什么。
java.lang.IllegalArgumentException: Entity must be managed to call
remove: HP Envy 15, try merging the detached and try the remove again.
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
您从会话中分离实体,然后将其删除。那不行。
尝试删除 em.detach(stock);
并将一些实体传递给保证附加到会话的方法,即从数据库中获取一些东西,然后立即将其删除。如果可行,则说明您以错误的方式使用了您的方法,很可能是使用了分离的或刚刚创建的实体。
删除
em.detach(stock);
detach 从 entityManager 中删除您的实体
如果实体未附加,则无法将其移除。如果该实体仍然附加,您可以按原样将其删除。如果不再附加,您可以使用 merge
:
重新附加它
if (!em.contains(stock)) {
stock = em.merge(stock);
}
em.remove(stock);
为什么分离对象?如果参数不是实体对象,分离将抛出 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();
我有这个方法来删除列表中选择的实体。但是当被调用时会产生这个错误,我不明白为什么。
java.lang.IllegalArgumentException: Entity must be managed to call remove: HP Envy 15, try merging the detached and try the remove again.
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
您从会话中分离实体,然后将其删除。那不行。
尝试删除 em.detach(stock);
并将一些实体传递给保证附加到会话的方法,即从数据库中获取一些东西,然后立即将其删除。如果可行,则说明您以错误的方式使用了您的方法,很可能是使用了分离的或刚刚创建的实体。
删除
em.detach(stock);
detach 从 entityManager 中删除您的实体
如果实体未附加,则无法将其移除。如果该实体仍然附加,您可以按原样将其删除。如果不再附加,您可以使用 merge
:
if (!em.contains(stock)) {
stock = em.merge(stock);
}
em.remove(stock);
为什么分离对象?如果参数不是实体对象,分离将抛出 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();