你是不是执行了一些操作,查出那条要更新的记录,又session.close(我从不关闭session);又要更新它,就出错了。

解决方案 »

  1.   

    public static void updateGwMb(String CGwmbId,String cDeptId, BigDecimal cFlag, String cBz, String cGwTitle)
    {
    Session session = HibernateUtil.currentSession();
                    Transaction tc = session.beginTransaction();
    try
    {

                TGwMb tgwmb=(TGwMb)session.load(TGwMb.class,CGwmbId);
                tgwmb.setCDeptId(cDeptId);
                tgwmb.setCFlag(cFlag);
                tgwmb.setCBz(cBz);
                tgwmb.setCGwTitle(cGwTitle);
                session.update(tgwmb);
                tc.commit();
    }
    catch(Exception e)
    {
    tc.rollback();
    e.printStackTrace();
    }
    }
      

  2.   

    你的数据库里不存在CGwmbId = "0000000008"的数据
    所以没有办法进行更新操作如果要更新数据,必须要保证数据存在的情况下才能进行更新
      

  3.   


    可是你这个错误:
    org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.lib.ygt.database.TGwMb#0000000008]就是提示不存在C_GWMB_ID = "0000000008"的数据
      

  4.   

    这就不清楚了,可能跟你的中文字段名有关吧??只是猜测我用你的程序测试过
    当然我起的table字段名是英文的
    这样可以更新数据,如果数据库里有相应的数据的话
      

  5.   

    我以前遇到过相似的问题,一般都是数据库中表字段类型设置出错,我的经验是设置类型一般是vchar型如果你用了其他类型,如long型则要设置初始值,这是因为hibernate将每个字段都映射成po中的一个属性,而在获取属性时如数据库中是null,则对象是不存在,则会报你所提到的错误.
      

  6.   

    首先,无论数据库中有没有0000000008这条数据,都不会报错。
    CGwmbId这个不应该是数据库的字段,是你的配置文件中对应的MAPPING的描述值,还有注意你的CGwmbId类型,你检查一下
      

  7.   

    我觉得你应该在load出来的那个对象先判断一下是不是为空,如果不是才好更新字段。
    你的错误应该是没有找到你要的那个对象,所以当你set属性的时候就出错了,因为你强制
    类型转换的时候是空的对象转换!!