我的设计的方法中同时调用了删除跟插入操作就报出如下异常,
谁能告诉我是什么异常:
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:85)
at org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:70)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:90)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:70)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:266)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.demo.impl.EmpDaoImpl.insert(EmpDaoImpl.java:42)
at org.demo.impl.EmpDaoImpl.remove(EmpDaoImpl.java:72)
at org.demo.impl.Operator_emp.main(Operator_emp.java:37)

解决方案 »

  1.   

    有可能你delete的时候这个对象已经删了,然后去insert,但是你的对象里面还有OID,hibernate默认给你按update操作了,但事实上已经删除了(你是用了saveOrupdate吧)
      

  2.   

    恩 你的已经删除了那条记录 又去修改了
    调用save方法
      

  3.   

    做删除一般都是先ById查询出数据,再用delete方法去删,这样会避免数据库中数据已不存在而出现的异常,同理,修改也是要先查出数据,再改。
    PS:最好做个事物,一面出错而导致数据丢失。
      

  4.   

    我用的是delete方法:按id删除,插入是用save方法插入一个对象;
    当我分开来写这两个步骤,分开编译可以通过,当两个步骤写一起同时编译就是通不过
    报同样的异常!
      

  5.   

    我在删除之前加了一个判断具体方法如下:public void remove(String cond,Emp emp2)throws Exception{
    if(this.queryById(cond)!=null){
    this.delete(cond);
    }
    this.insert(emp2);
    }