不清除你是如何操作的。能否写出业务流程?而且是否当时有其它程序或用户访问数据库?其它访问是否也是通过Hibernate?如果是多用户的话,有可能是因为并发造成的问题。
你使用的是一级缓存还是开了二级缓存?二级的用的什么缓存?
我没有开二级缓存,也没有并发访问系统。仔细查看了一下程序,发现有一处的session没有关闭造成。即使时hibernate查找一级缓存的数据,但应当取得的数据应当是唯一的,为什么会出现新旧数据交替出现?
源程序是这样的:
public Model browseModel(int id,Class model) throws Exception, StsException {
DbAccessService dbAccess= new DbAccessService();
Model m= (Model) dbAccess.get( model, new Integer(id));
//dbAccess.close();//HSessionFactory.closeSession();
return m;
}
dbAccess.get() 封装的是return HSessionFactory.getSession().get(arg0, arg1);
下面是对一个多对多关系删除操作:
public void deleteModel(int id,Class model) throws Exception, StsException {
DbAccessService dbAccess= new DbAccessService();
dbAccess.beginTransaction();
Model m=(Model)dbAccess.get(model, new Integer(id));
System.out.println("m.id======="+m.getId());
m.removeRelateModel();//解除关联关系
//if(m.removeRelateModel()){
// //dbAccess.update(m);
// dbAccess.flush();
// }
//dbAccess.delete(id, model); dbAccess.deleteModel(m); //session().delete(model);
dbAccess.commit(); //Session().getTransaction().commit();
dbAccess.close();
}
上面程序在执行dbAccess.commit();时抛出异常
Could not synchronize database state with session
org.hibernate.StaleStateException: Unexpected row count: 0 expected: 1
at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:27)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2291)
at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2440)
我使用的是sqlserver数据库。
从出错情况看是没有删除数据对象时产生的,但是数据对象存在的。
不知道该怎么解决,只好用下面这种方式:
//if(m.removeRelateModel()){
// //dbAccess.update(m);
// dbAccess.flush();
// }
//dbAccess.delete(id, model);
谁知道这是什么缘故,该怎么解决?