2016-12-31 32 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

相關問題