考虑以下两种方法来删除一组名为“John”的员工。
List<Employee> list = new ArrayList<Employee>();
String query= " from Employee emp where emp.name = 'John'";
list=getHibernateTemplate().find(query);
第一种方法:
getHibernateTemplate().deleteAll(list);
第二种方法:
Iterator<BulkChangeRequest> itList = list.iterator();
while(itList.hasNext()) {
Employee emp = itList.next();
getHibernateTemplate().delete(emp);
}
它们在性能方面有显着差异吗?它们是否基本相同,即deleteAll方法是否逐个删除行?
使用以下查询在SQL中执行此操作也不是更好吗?
" delete from Employee where name = 'John'"
答案 0 :(得分:1)
是。最好使用SQL或HQL删除名为“John”的所有员工记录,而不是第一个选项。只是因为在第一个选项中,您必须将所有员工记录从db加载到删除。这显然是一项额外的任务。
我认为,对于delete()
和deleteAll()
,除delete()
之外没有区别,它会为每次通话创建新会话;而在deleteAll()
中,所有对象都将在一个会话中删除。但查询的数量将是相同的。
答案 1 :(得分:1)
我建议你阅读本节one shot delete
:
逐个删除集合元素有时可能非常有用 效率低下。 Hibernate知道不会这样做 新空集合(例如,如果你调用了list.clear())。在 在这种情况下,Hibernate将发出一个DELETE。