java - JPA 删除带有 IdClass 问题的查询

标签 java jpa

当我在 JPA 中为具有复合键的实体使用 Idclass 时,我编写了一个删除方法,如:

private static void removeEmployee(Employee employee) {
    EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("JPA_excer_3b");
    EntityManager em = emf.createEntityManager();
    try {
        em.getTransaction().begin();
        Employee anemployee = em.find(Employee.class, employee.getId());
        em.remove(anemployee);
        em.getTransaction().commit();
    } catch (Exception e) {
        logging.error("This error is added a removing a employee :"
                + " :" + e);
    } finally {
        // Close all the connections:
        em.close();
        emf.close();
    }
}

我得到错误:

ERROR Logger:22 - This error is added a removing a employee :java.lang.IllegalArgumentException: Provided id of the wrong type for class be.leerstad.JPA.entities.Employee. Expected: class be.leerstad.JPA.entities.EmployeePK, got class java.lang.Integer

当我将代码更改为:

private static void removeEmployee(Employee employee) {
    EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("JPA_excer_3b");
    EntityManager em = emf.createEntityManager();
    try {
        **EmployeePK pk = new EmployeePK(employee.getId(),employee.getEmail());**
        em.getTransaction().begin();
        Employee anemployee = em.find(Employee.class, **pk**);
        em.remove(anemployee);
        em.getTransaction().commit();
    } catch (Exception e) {
        logging.error("This error is added a removing a employee :"
                + " :" + e);
    } finally {
        // Close all the connections:
        em.close();
        emf.close();
    }
}

我没有收到任何错误,但我想知道这样做是否正确?

最佳答案

是的,这是正确的做法。 EntityManager.find() 方法需要一个实体 ID 类的实例。不是实体的一些随机属性。

请注意,错误不是由 remove() 方法引起的,而是由 find() 方法引起的。

关于java - JPA 删除带有 IdClass 问题的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13902165/

相关文章:

java - Log4j 版本 2 从 Java 设置根日志记录级别?

java - 建立一个前端网站

java - 有什么方法可以根据某些条件递归调用 Rythm 模板吗?

java - 如何从列表中获取距离给定目标最近的 vector

java - 如何在 JPA 中映射 ManyToMany 关联与联接表

Hibernate/JPA 和 PostgreSQL - 主键?

java - 使用 Hibernate 查询 SQL Server 2005 加密列的 Web 应用程序

java - webdriver中使用TestNG框架实现登录

spring - EntityManager bean 的 @Autowired 与 @PersistenceContext

jpa - 我可以在接口(interface)上注释@EntityListener 吗?