2016-12-31 62 views
0

为什么我们应该在删除它之前合并实体?
其中哪些有效?为什么我们应该在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); 
} 
+0

为什么你会在删除前合并?只有你需要删除的东西是一个“托管”对象,所以在删除之前合并一些变化是毫无意义的......完全没有意义 –

回答

0
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

相关问题