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 ;
} 展开
严重: 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 ;
} 展开
展开全部
删除完的查询方法是不是写到循环里了???
不要写到里面
不要写到里面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你都知道是在不停的调用find方法了
难道找不到是在什么地方调的?
肯定你有调用的动作嘛
难道找不到是在什么地方调的?
肯定你有调用的动作嘛
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
批量处理最好用jdbc原始的方法,hibernate的处理的不是很好,效率很低
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可不可以写个批量删除的方法,把deletLog方法改改每次传一个id删一条记录,每次关闭session,这样会不会好点?
public void batchdelet(){
for(int j=0;j<loginid.size();j++){
...
deletLog(loginid.get(j));
...
}
}
public void batchdelet(){
for(int j=0;j<loginid.size();j++){
...
deletLog(loginid.get(j));
...
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询