考虑以下两种删除名为“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'"
最佳答案
是的。最好使用 SQL 或 HQL 删除所有名为“John”的员工记录,而不是第一个选项。仅仅因为在第一个选项中,您必须从数据库加载所有员工记录才能删除。这显然是一项额外的任务。
我认为,对于 delete()
和 deleteAll()
,除了 delete()
没有区别,它会为每次调用创建新 session ;而在 deleteAll()
中,所有对象都将在一个 session 中被删除。但是查询的数量将是相同的。