2012-07-04 122 views
0

我知道下面的代碼將使用id = 5,從數據庫中刪除記錄:高效刪除休眠

Query query = session.createQuery("delete from Class where id = 5"); 
query.executeUpdate(); 

但在此之前我刪除它,需要保存在變量此記錄的數據。 所以我想選擇id = 5,並在一些代碼後,我刪除它。 如果我爲它們使用兩個不同的查詢,效率不高。因爲通過這種方式,我們爲這個項目搜索數據庫兩次。

query = session.createQuery("from Class where id = 5"); 
//somecode 
query = session.createQuery("delete Class where id = 5"); 
... 

所以我需要一個更有效的方法來做到這一點,並做得更好。

+2

這將是很好的解釋爲什麼你認爲這不是一個好的編碼方式。否則,它就像另一個「給我代碼有效」的問題。 –

+0

是的,沒錯。我不想像他們那樣編碼,因爲它必須在數據庫中搜索2次。 但在答案中解釋了這項任務的正確方法。 –

+2

我知道,但是我的觀點仍然存在,你說這樣做是一個壞主意,但從未解釋你爲什麼這麼想。 –

回答

4

無需創建查詢來刪除記錄。

query = session.createQuery("from Class where id = 5"); 
List list=query.list(); 
if(list.size()!=0) 
{ 
    ClassName obj = (ClassName)list.get(0); 
    session.delete(obj); 
    } 
+2

另外,如果'id'字段是@Id,你可以使用session.get()來獲取你的對象來代替session.createQuery。 –

3

Hibernate有一個Session.delete()方法。如果您已經有要刪除的實體的引用,請使用它。不需要查詢。

這也將應用在關聯上配置的潛在級聯,而刪除查詢則不會。

+0

提及級聯的+1。 –