我想这个SQL 单独在查询分析器上面去执行也是有问题的

解决方案 »

  1.   

    session.update(实例);
    这个方法是把游离态的实例固化到数据中。
    也就是说,你必须根据傳入的province的ID(傳入的这个实例必须带有主键哦),查询出一个游离态的“province”,
    再根据这个游离态的“province”来改变值,最后提交到数据库public void updateProvince(Province province) throws Exception { 
    try{ 
    //取得一个Hibernate的会话实例 
    session = MySessionFactory.getSession(); 
    //开始Hibernate的事务管理 
    tx = session.beginTransaction(); 
    //将province持久化(更新)到数据库 
    Province newProvince = (Province)session.get(Province.class,province.getId);System.out.println(newProvince .getProvincecode()); 
    System.out.println(newProvince .getProvincename()); 
    session.update(newProvince ); //提交事务 
    tx.commit(); 
    System.out.println("错误"); }catch(Exception ex){ 
    //回滚事务 
    tx.rollback(); 
    ex.printStackTrace(); 
    }finally{ 
    //关闭当前会话 
    MySessionFactory.closeSession(); 

    }
      

  2.   

    你使用的是UPDATE,但是数据库里没有主键相关的值,所以出现异常。
      

  3.   

    System.out.println(province.getProvincecode()); 
    System.out.println(province.getProvincename()); 
    session.update(province); //提交事务 
    tx.commit(); 
    System.out.println("错误"); 改为:System.out.println(province.getProvincecode()); 
    System.out.println(province.getProvincename()); 
    session.saveOrUpdate(province); //提交事务 
    tx.commit(); 
    System.out.println("错误"); 
      

  4.   

    根据5楼说的,我回去试了试,还是不行,又出现了另一个错误!!!
    如果换成这样,session.saveOrUpdate(province);  还是又问题!!!
    郁闷了......
      

  5.   

    update方法会在执行的时候会先去数据库里面根据OID做一次查询.
    得到这个查询后的对象再取与你传入的对象比较.更新相关子段.
    你可以先为 你的传的province设置个数据库中存在的ID测试下.
      

  6.   

    应该是说原来数据库中那个province对象的oid与现在update这个的province的oid不一致了吧
    我们的看起来这个oid是一致的 但是在编译中其实是不一直的