簡體   English   中英

JPA使用IdClass問題刪除查詢

[英]JPA removing query with IdClass issue

當我在JPA中使用Idclass用於具有復合鍵的實體時,我編寫了一個remove方法,如:

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()方法引起的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM