最近用ssh框架遇到批量删除问题,如果用getHibernateTemplate().deleteAll()方法进行删除会为每条数据生成一条delete语句,效率极低,而且dileteAll()方法的参数是对象,如果我只传了id只能先获取了再删。
而用getHibernateTemplate().execute()方法通过自定义hql删除效率快而且只需要id就够了
代码
/**
* 通过id批量删除
* @param ids
*/
public void deleteByIds(final List<String> ids) {
// 获取类名--对应表单
String pojoName = entityClass.getSimpleName();
// hql语句
final String hql = "DELETE "+pojoName+" WHERE UUID IN (:ids)";
实现
this.getHibernateTemplate().execute(new HibernateCallback<Object>() {
// 实现HibernateCallback接口获得Hibernate Session的引用
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createSQLQuery(hql);
query.setParameterList("ids", ids);
return query.executeUpdate();
}
});
}
转自