简体   繁体   English

IllegalArgumentException:必须管理实体才能调用remove

[英]IllegalArgumentException: Entity must be managed to call remove

Controller page has following code 控制器页面具有以下代码

                BigDecimal id=new BigDecimal(request.getParameter("empId"));
                employee.setEmpno(id);
                flag = factory.removeEmployee(employee);

TransactionFactory class TransactionFactory

    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 variable name of Emp type. 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.

As suggested by @JBNizet 正如@JBNizet建议的

I'm creating instance of EntityManagerFactory only once by putting into private constructor and retrieving instance by getter method of this class. 通过将其放入私有构造函数并通过此类的getter方法检索实例,我仅创建EntityManagerFactory实例一次。

And for removing entity I used following code 为了删除实体,我使用了以下代码

        Emp ref = factory.getManager().find(Emp.class, emp.getEmpno());           
        factory.getManager().remove(ref);

And, It works.!! 而且,它有效。

暂无
暂无

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

相关问题 必须管理实体以调用删除 - Entity must be managed to call remove 实体必须被管理以调用remove吗? - Entity must be managed to call remove? 当我尝试删除实体时,必须管理实体以调用remove - Entity must be managed to call remove when I try to delete an entity IllegalArgumentException:实体不能是 null - IllegalArgumentException: Entity must not be null IllegalArgumentException 'value' 的每个元素都必须是有效的托管对象 - IllegalArgumentException Each element of 'value' must be a valid managed object Junit 与 MockMVC - 错误 - java.lang.IllegalArgumentException:实体不能为空 - Junit with MockMVC - Error - java.lang.IllegalArgumentException: Entity must not be null 引起:java.lang.IllegalArgumentException: Entity must have id - Caused by: java.lang.IllegalArgumentException: Entity must has id 原因:java.lang.IllegalArgumentException:不是托管类型:&原因:org.hibernate.AnnotationException:未为实体指定标识符: - Caused by: java.lang.IllegalArgumentException: Not a managed type: & Caused by: org.hibernate.AnnotationException: No identifier specified for entity: java.lang.IllegalArgumentException:不是托管类型:类 com.SportyShoe.Entity.Shoe - java.lang.IllegalArgumentException: Not a managed type: class com.SportyShoe.Entity.Shoe 当实体类和Spring数据存储库位于同一包中时,“ java.lang.IllegalArgumentException:不是托管类型…” - “java.lang.IllegalArgumentException: Not a managed type …” when entity class and Spring data repository in same package
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM