考虑以下两种删除名为“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 中被删除。但是查询的数量将是相同的。

10-07 23:27