複合キーを持つエンティティに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();
}
}
エラーは発生しませんが、これが正しい方法かどうか疑問に思います。