我下面的这个类时有时无的报下面的错 貌似问题处在delete上 只要多次报错 tomcat就会停止响应 严重: Exception executing batch:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:146)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:368)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:779)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:775)
at com.office.daoimpl.LoginLogDaoImpl.deletLog(LoginLogDaoImpl.java:49)
at com.office.serviceimpl.LoginLogServiceImpl.deletLog(LoginLogServiceImpl.java:31)
at com.office.struts.UserLogAction.userTest(UserLogAction.java:90)
package com.office.daoimpl;import java.util.List;import org.hibernate.Query;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.office.dao.LoginLogDao;
import com.office.vo.LoginIog;public class LoginLogDaoImpl extends HibernateDaoSupport implements LoginLogDao {
@SuppressWarnings("unchecked")
protected int start=0;
protected int end=10; public void addLog(LoginIog log) {
// TODO Auto-generated method stub
long timestart=System.currentTimeMillis();
for(int i=0;i<=40;i++){
try {
this.getHibernateTemplate().save(log);
} catch (DataAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(System.currentTimeMillis()-timestart);
start=0;
end=10;
} @SuppressWarnings("unchecked")
public void deletLog(List loginid){
// TODO Auto-generated method stub
long timestart=System.currentTimeMillis();
start=0;
end=10;
for(int i=loginid.size()-1;i>=0;i--){
Object obj=loginid.get(i);
List<LoginIog> list=this.getHibernateTemplate().find("from LoginIog where LoginId=?" , obj);
if(list.size()>0){
LoginIog loginlog=list.get(0);
this.getHibernateTemplate().delete(loginlog);
}
else{
System.out.println(list.size());
}
}
} @SuppressWarnings("unchecked")
public List findAllLog() {
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);
this.getSession().close();
List list=q.list();System.out.println(list.size());
start+=10;
end+=10;
System.out.println(start+"---"+end);
return list ;
}
public List findByInDate(String startdate,String enddate){
List list=this.getHibernateTemplate().find("from LoginIog where LoginTime between'"+startdate+"' and '"+enddate+"'");
return list;
}
}
org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
at org.hibernate.jdbc.Expectations$BasicExpectation.checkBatched(Expectations.java:61)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:46)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:68)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:146)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:368)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:779)
at org.springframework.orm.hibernate3.HibernateTemplate.delete(HibernateTemplate.java:775)
at com.office.daoimpl.LoginLogDaoImpl.deletLog(LoginLogDaoImpl.java:49)
at com.office.serviceimpl.LoginLogServiceImpl.deletLog(LoginLogServiceImpl.java:31)
at com.office.struts.UserLogAction.userTest(UserLogAction.java:90)
package com.office.daoimpl;import java.util.List;import org.hibernate.Query;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.office.dao.LoginLogDao;
import com.office.vo.LoginIog;public class LoginLogDaoImpl extends HibernateDaoSupport implements LoginLogDao {
@SuppressWarnings("unchecked")
protected int start=0;
protected int end=10; public void addLog(LoginIog log) {
// TODO Auto-generated method stub
long timestart=System.currentTimeMillis();
for(int i=0;i<=40;i++){
try {
this.getHibernateTemplate().save(log);
} catch (DataAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println(System.currentTimeMillis()-timestart);
start=0;
end=10;
} @SuppressWarnings("unchecked")
public void deletLog(List loginid){
// TODO Auto-generated method stub
long timestart=System.currentTimeMillis();
start=0;
end=10;
for(int i=loginid.size()-1;i>=0;i--){
Object obj=loginid.get(i);
List<LoginIog> list=this.getHibernateTemplate().find("from LoginIog where LoginId=?" , obj);
if(list.size()>0){
LoginIog loginlog=list.get(0);
this.getHibernateTemplate().delete(loginlog);
}
else{
System.out.println(list.size());
}
}
} @SuppressWarnings("unchecked")
public List findAllLog() {
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);
this.getSession().close();
List list=q.list();System.out.println(list.size());
start+=10;
end+=10;
System.out.println(start+"---"+end);
return list ;
}
public List findByInDate(String startdate,String enddate){
List list=this.getHibernateTemplate().find("from LoginIog where LoginTime between'"+startdate+"' and '"+enddate+"'");
return list;
}
}
我判断了list的大小了啊,这个算法当批量删除七八次之后 服务器就瘫痪了,根本就不动了 也不报错