请考虑以下两种方法来删除名为“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”的所有员工记录,而不是第一个选项.只是因为在第一个选项中,您必须将所有员工记录从db加载到删除.这显然是一项额外的任务.
我认为,对于delete()和deleteAll(),除了delete()之外没有区别,它会为每个调用创建新的会话;而在deleteAll()中,所有对象都将在一个会话中删除.但查询的数量将是相同的.