批删除

励志成为一名架构师 2012-08-05 11:52:44
Action获取了jsp传过来的一组checkbox,checkbox的值是id,可以用hibernate中的deleteall()根据id进行批删除吗?
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
flash8627 2012-08-05
  • 打赏
  • 举报
回复
/**
* 删除多条 记录
*
* @param entityClass
* @param att
* @param val
*/
public void attrDeletes(Class<T> entityClass, Object att, Object... val) {
StringBuilder sb = new StringBuilder();
sb.append("DELETE FROM ");
sb.append(entityClass.getSimpleName());
sb.append(" WHERE ");
sb.append(att.toString());
sb.append(" in (:val)");
// String hql = "DELETE FROM Article WHERE aid in (:ids)";
Query q = this.getSession().createQuery(sb.toString());
sb.delete(0, sb.length());
q.setParameterList("val", val).executeUpdate();
}

/**
* 批量删除 ? 待续
*
* @param list
*/
public void deleteBulk(List<T> list) {
int i = 1000;
for (T e : list) {
i++;
this.deleteObject(e);
if (i % 20 == 0) {
// 将本批数据插入数据库,并释放内存
this.flush();
this.clear();
}
if (i % 1000 == 0) {
try {
this.commit();
} catch (HibernateException e1) {
e1.printStackTrace();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}

}

/**
*
*/
public void deletes(Class<T> entityClass, String idArr) {
String[] ids = idArr.split(",");
Long[] ls = new Long[ids.length];
String hql = "DELETE FROM " + entityClass.getSimpleName();
hql += " WHERE "
+ HibernateConfigurationHelper.getPrimaryKeyName(entityClass);
hql += " in (:ids)";
Query q = getSession().createQuery(hql);
for (int i = 0; i < ids.length; i++) {
logger.debug(ids[i]);
ls[i] = Long.parseLong(ids[i]);
}

都是的,随便用
  • 打赏
  • 举报
回复
你们说的都很对,我自己是用For循环做的,但是我想知道hibernate自带的this.getHibernateTemplate().deleteAll(entities);怎么用?能不能根据ID删除多条记录?
Teln_小凯 2012-08-05
  • 打赏
  • 举报
回复
批删除很简单,你用ck获取的值,比如说ID,结果为params=1,3,5,6,8
然后你在删除方法sql=delete text where id in (params);
这样就好了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧