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

时间:2013-08-26 06:21:19

标签: java

当我尝试将关键字段更新到数据库时,这个问题也出现在session.flush()和session.clear()方法中。

Bean.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();
    }

2 个答案:

答案 0 :(得分:0)

这是因为你在刷新会话后提交了事务,改变它的顺序如下:

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

答案 1 :(得分:0)

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