public void delBook(String[] bookIds) throws Exception {
Session session = this.getSession();
Transaction ts = session.beginTransaction();
try {
StringBuffer hql = new StringBuffer();
hql.append("delete from Book as book where book.id in (:bookIds)");
Query query = session.createQuery(hql.toString());
query.setParameterList("bookIds", bookIds);
ts.commit();
} catch (Exception e) {
e.printStackTrace();
ts.rollback();
throw e;
} finally {
closeSession();
}
}
上面是我没怎么过脑子写的批量删除的一个dao层的实现,但是忽然发现好像没有这么写的!
第一个疑问是query这个对象是不是只能是更新的时候用,像我上面写的这样是不是根本不能起作用呢?可以可以像我上面的这样写呢?
第二个疑问是hibernate中我们拿到一个id数组去批量删除的时候一般都是怎么做的?难道都是用for循环遍历么?
解决方案 »
- 对日开发?
- 怎么用java 代码读取 google Calander的日历和日程提醒信息!急!
- snv 版本控制问题
- JAVA怎么使用MODBUS协议实现client端和server端
- 求救Error establishing socket.java.sql.sqlException!十万火急!
- J2EE项目中,怎样对客户端电脑的串口进行操作?
- 学过jsp之后是先学j2ee好还是先学web框架比较好呢
- tomcat控制台为啥无法显示 system.out.println()的东西
- 【急救】tomcat5的怪异问题!
- 使用ant包装duke问题?打包出如下错?
- http上传文件问题 在线等 谢谢
- myeclipse
2是 级联删除 比如我删商品类别可以设定XML里进行级联删除 对 关联商品类别的 ”商品“ 进行批量删除
语法如下:
Query query = session.createQuery(hql);
query.executeUpdate();你的第二个疑问,没有这样写的,你有2种解决方案
1,用for循环,一个个的删除
2,拼sql,将String[]数组拼成如下形式
('a','b','c');
一条sql可以搞定,相信你能理解我的意思建议用for循环,这样比较符合规范
最后要调用 执行删除的方法对于传的数组 应该和 book.id 的类型对应
ok.本来看你的回复感觉挺好,但是看到最后一句蒙了"建议用for循环,这样比较符合规范"
普遍做法是用for循环批量删除么?不可能把,我要一次删几万条数据循环几万次是么?不可能啊,批量删除的正规做法肯定是用sql语句批量删啊
query.executeUpdate();然后才是ts.commit();
我记得HibernateTemplate有个删除多个的方法的。
public void deleteAll(Collection entities)