2012-03-01 8 views
4

"John"という名前の従業員セットを削除するには、以下の2つの方法を検討してください。休止状態のDelete()およびDeleteall()

List<Employee> list = new ArrayList<Employee>(); 
String query= " from Employee emp where emp.name = 'John'"; 
list=getHibernateTemplate().find(query); 

まず方法:

getHibernateTemplate().deleteAll(list); 

第2の方法:

Iterator<BulkChangeRequest> itList = list.iterator(); 
    while(itList.hasNext()) { 
     Employee emp = itList.next(); 
     getHibernateTemplate().delete(emp); 
    } 

彼らはパフォーマンスの面で大きく異なるのですか?両方とも本質的に同じですか、つまり、deleteAllメソッドは行を1つずつ削除しますか?

また、次のクエリを使用してSQLでそれを行う方が良いでしょうか?

" delete from Employee where name = 'John'" 

答えて

1

はい。最初のオプションではなく、「John」という名前のすべての従業員レコードを削除するには、SQLまたはHQLを使用する方がよいでしょう。単に最初のオプションでは、すべての従業員レコードをdbから削除して削除する必要があるからです。それは明らかに余分な仕事です。

delete()deleteAll()については、delete()を除いて違いはありません。それは、すべての通話に対して新しいセッションを作成することになります。 deleteAll()では、すべてのオブジェクトが1つのセッションで削除されます。しかし、クエリの数は同じになります。

+0

はい私はそう考えていましたが、最初の2つの方法(delete()とdeleteAll())の間に違いはありますか? – Chillax

+0

更新された回答を確認してください。 – nIKUNJ

0

私はあなたがこのセクション、one shot delete読むことをお勧め:一つ一つが、時には極めて 非効率的になることがあり、コレクションの要素を削除

https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/performance.html#performance-collections-oneshotdelete

を。 Hibernateは、新しく空のコレクション (list.clear()を呼び出した場合など)の場合、それをしないことを知っています。 この場合、Hibernateは単一のDELETEを発行します。