IllegalArgumentException:实体必须被管理才能调用remove [英] IllegalArgumentException: Entity must be managed to call remove
本文介绍了IllegalArgumentException:实体必须被管理才能调用remove的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
控制器页面具有以下代码
Controller page has following code
BigDecimal id=new BigDecimal(request.getParameter("empId"));
employee.setEmpno(id);
flag = factory.removeEmployee(employee);
TransactionFactory
class
public final class EntityTransactionFactory implements TransactionFactory{
@PersistenceContext
private EntityManagerFactory Factory;
private EntityManager Manager;
@Resource
private UserTransaction Transaction;
private static final TransactionFactory transaction = new EntityTransactionFactory();
private EntityTransactionFactory() {
}
public static TransactionFactory getInstance() {
return transaction;
}
/**
* @return the Factory
*/
@Override
public EntityManagerFactory getFactory() {
Factory= Persistence.createEntityManagerFactory("SampleBeanPU");
return Factory;
}
/**
* @return the Manager
*/
@Override
public EntityManager getManager() {
Manager=getFactory().createEntityManager();
return Manager;
}
/**
* @return the Transaction
*/
@Override
public UserTransaction getTransaction() {
try {
Transaction = (UserTransaction) new InitialContext().lookup("java:comp/UserTransaction");
} catch (NamingException e) {
Transaction=null;
}
return Transaction;
}
}
emp
变量名称 Emp
类型。
TransactionFactory factory=EntityTransactionFactory.getInstance();
factory.getTransaction().begin();
factory.getManager().joinTransaction();
Emp ref= factory.getManager().getReference(Emp.class, emp.getEmpno());
System.out.println(ref.getEname());
factory.getManager().remove(factory.getManager().merge(ref));
System.out.println(factory.getTransaction().getStatus());
factory.getTransaction().commit();
System.out.println(factory.getTransaction().getStatus());
//factory.getManager().flush();
factory.getManager().close();
factory.getFactory().close();
但是,获取以下异常,指向上面的代码。
But, getting following exception, which is pointing on above code.
java.lang.IllegalArgumentException: Entity must be managed to call remove: com.entity.Emp[ empno=1234 ], try merging the detached and try the remove again.
推荐答案
根据@JBNizet的建议
As suggested by @JBNizet
我通过放入私有构造函数和通过此类的getter方法检索实例,仅创建一个 EntityManagerFactory
的实例。
I'm creating instance of EntityManagerFactory
only once by putting into private constructor and retrieving instance by getter method of this class.
对于删除实体,我使用以下代码
And for removing entity I used following code
Emp ref = factory.getManager().find(Emp.class, emp.getEmpno());
factory.getManager().remove(ref);
而且,它有效!!
这篇关于IllegalArgumentException:实体必须被管理才能调用remove的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文