hibernate批量删除的问题 头疼!!!!!!

一下是我hibernate删除代码这样一次删除十条记录删除七八次服务器直接没响应,网页下面的进度条走到很慢,还时不时的报下面的错:严重:Exceptionexecutin... 一下是我hibernate删除代码 这样一次删除十条记录 删除七八次 服务器直接没响应,网页下面的进度条走到很慢,还时不时的报下面的错:
严重: Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected:

public void deletLog(final List loginid){

this.getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException,
SQLException {
String hql="delete from LoginIog where LoginId=:id";
Query qu=session.createQuery(hql);
for(int j=0;j<loginid.size();j++){
qu.setString("id", (String) loginid.get(j));
int d=qu.executeUpdate();
if(d%5==0)
session.flush();
session.clear();
}

return null;
}
});
我测试了一下 原来不是hibernate的问题,是这个的问题,我每次删除完,都回调find方法刷新页面,我不停的调用find方法 结果就是服务器卡死。这只是个 简单的指定段查询而已,有什么问题呢? public List findAllLog() {
start=0;
end=10;
System.out.println(start+"---"+end);
String hql="from LoginIog order by LoginId desc";
Query q= this.getSession().createQuery(hql);
q.setFirstResult(start);
q.setMaxResults(end);
List list=q.list();System.out.println(list.size());
start+=10;
end+=10;
System.out.println(start+"---"+end);
return list ;
}
展开
 我来答
LHLBT3GOOD
2010-03-30 · TA获得超过546个赞
知道小有建树答主
回答量:401
采纳率:0%
帮助的人:536万
展开全部
你用 id in(?,?,?,?);不就得咯

批量删除最好不用hql
使用QBC方式

session.createCriteria();

然后再用Expression.in("id",new Integer(){.....});

使用 where id in()的方式,快多了
百度网友57d33d6f5
2010-04-09 · 超过10用户采纳过TA的回答
知道答主
回答量:213
采纳率:0%
帮助的人:61.3万
展开全部
删除完的查询方法是不是写到循环里了???
不要写到里面
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dywlhnt
2010-03-31 · TA获得超过204个赞
知道小有建树答主
回答量:155
采纳率:0%
帮助的人:99.5万
展开全部
你都知道是在不停的调用find方法了
难道找不到是在什么地方调的?
肯定你有调用的动作嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tubage408
2010-03-30
知道答主
回答量:38
采纳率:0%
帮助的人:22万
展开全部
批量处理最好用jdbc原始的方法,hibernate的处理的不是很好,效率很低
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lulu393363157
2010-03-30 · 超过11用户采纳过TA的回答
知道答主
回答量:45
采纳率:0%
帮助的人:38.8万
展开全部
可不可以写个批量删除的方法,把deletLog方法改改每次传一个id删一条记录,每次关闭session,这样会不会好点?
public void batchdelet(){
for(int j=0;j<loginid.size();j++){
...
deletLog(loginid.get(j));
...
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式