为什么我们应该在jpa/hibernate中删除之前合并实体
问题描述:
为什么我们应该在删除它之前合并实体?
其中哪些有效?为什么我们应该在jpa/hibernate中删除之前合并实体
public void removeStudent(int i){
Student studentD = entityManager.find(Student.class, i);
tx.begin();
entityManager.remove(studentD);
tx.commit();
}
public void removeStudent(Student student){
Student studentD = entityManager.merge(student);
entityManager.remove(studentD);
}
答
public void removeStudent(int i){
Student studentD = entityManager.find(Student.class, i);
tx.begin();
entityManager.remove(studentD);
tx.commit();
}
这段代码违背了使用交易在所有的目的,不永远使用它。对EntityManager.find
的调用应该在事务范围内,以确保您不会尝试删除不再存在的实体。
如果您仅需要对实体进行删除的引用,请使用EntityManager.getReference
而不是EntityManager.find
。
为什么你会在删除前合并?只有你需要删除的东西是一个“托管”对象,所以在删除之前合并一些变化是毫无意义的......完全没有意义 –