Java org.hibernate.StaleStateException:批处理更新从更新[0]返回了意外的行数;实际行数:0;预期:1

Java org.hibernate.StaleStateException:批处理更新从更新[0]返回了意外的行数;实际行数:0;预期:1,java,Java,当我尝试将数据库中的键字段更新到数据库中时,使用session.flush()和session.clear()方法也会出现此问题 java SessionFactory sf = HibernateUtil.getSessionFactory(); Session s = sf.openSession(); Criteria crit3=s.createCriteria(RoleTable.class); roledata=crit3.list()

当我尝试将数据库中的键字段更新到数据库中时,使用session.flush()和session.clear()方法也会出现此问题

java

SessionFactory sf = HibernateUtil.getSessionFactory();
        Session s = sf.openSession();
        Criteria crit3=s.createCriteria(RoleTable.class);
        roledata=crit3.list();
        for(RoleTable rt:roledata){
        Transaction tx = s.beginTransaction();
        RoleTable rot=new RoleTable();
        rot.setSno(1);
        rot.setObtype(rt.getObtype());
        rot.setObid(rt.getObid());
        rot.setText(rt.getText());
        rot.setSdat(rt.getSdat());
        rot.setEdat(rt.getEdat());
        rot.setUpdate(rt.isUpdate());
        rot.setCreate(rt.isCreate());
        rot.setDelete(rt.isDelete());
        rot.setRead(rt.isRead());
        s.update(rot);
        s.flush();
        s.clear();
        tx.commit();

        }
        s.close();
        sf.close();
    }

这是因为您在刷新会话后提交了事务,请更改其顺序,如下所示:

tx.commit();  
s.flush();
s.clear();

您正在更新现有角色表(我想您只想更新Sno字段)。 您不需要创建新角色表。只需编辑列表中的一个(rt实例)