this.getCurrentSession().saveOrUpdate(o);
这是Hibernate的方法啊,如果只有:
Tuser t = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
if (t != null) {
    t.setName(UUID.randomUUID().toString());
}
<span style="color: #FF0000;">
userDao.saveOrUpdate(t);
这段代码是执行更新的,加上下面的,更新就不执行了,很郁闷

解决方案 »

  1.   


    this.getCurrentSession().saveOrUpdate(o);
    这是Hibernate的方法啊,如果只有:
    Tuser t = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
    if (t != null) {
        t.setName(UUID.randomUUID().toString());
    }
    <span style="color: #FF0000;">
    userDao.saveOrUpdate(t);
    这段代码是执行更新的,加上下面的,更新就不执行了,很郁闷
      

  2.   

    hibernate 语句打印出来看看,是不是执行了
      

  3.   

    你报什么错?Tuser admin = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
    admin.setId("admin");
    userDao.saveOrUpdate(admin);试试
      

  4.   


    Tuser t = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
    if (t != null) {
        t.setName(UUID.randomUUID().toString());
    }
    上面的执行结果如下:
    Hibernate: 
        select
            tuser0_.ID as ID1_,
            tuser0_.CREATEDATETIME as CREATEDA2_1_,
            tuser0_.MODIFYDATETIME as MODIFYDA3_1_,
            tuser0_.NAME as NAME1_,
            tuser0_.PWD as PWD1_ 
        from
            T_USER tuser0_ 
        where
            tuser0_.NAME=? 
            and tuser0_.ID<>'admin'
    Hibernate: 
        update
            T_USER 
        set
            CREATEDATETIME=?,
            MODIFYDATETIME=?,
            NAME=?,
            PWD=? 
        where
            ID=?
    Tuser t = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
    if (t != null) {
        t.setName(UUID.randomUUID().toString());
    }
    Tuser admin = new Tuser();
    admin.setId("admin");
    admin.setName("admin");
    admin.setPwd(Encrypt.e("admin"));
    admin.setModifydatetime(new Date());
    userDao.saveOrUpdate(admin);
    这个的运行结果:
    Hibernate: 
        select
            tuser0_.ID as ID1_,
            tuser0_.CREATEDATETIME as CREATEDA2_1_,
            tuser0_.MODIFYDATETIME as MODIFYDA3_1_,
            tuser0_.NAME as NAME1_,
            tuser0_.PWD as PWD1_ 
        from
            T_USER tuser0_ 
        where
            tuser0_.NAME=? 
            and tuser0_.ID<>'admin'
    Hibernate: 
        select
            tuser_.ID,
            tuser_.CREATEDATETIME as CREATEDA2_1_,
            tuser_.MODIFYDATETIME as MODIFYDA3_1_,
            tuser_.NAME as NAME1_,
            tuser_.PWD as PWD1_ 
        from
            T_USER tuser_ 
        where
            tuser_.ID=?
    Hibernate: 
        insert 
        into
            T_USER
            (CREATEDATETIME, MODIFYDATETIME, NAME, PWD, ID) 
        values
            (?, ?, ?, ?, ?)
    只执行上面一部分有update,两个一起执行时,上面就不执行更新了。
      

  5.   

    Tuser t = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
    if (t != null) {
        t.setName(UUID.randomUUID().toString());
    }
    userDao.saveOrUpdate(t);
    Tuser admin = new Tuser();
    admin.setId("admin");
    admin.setName("admin");
    admin.setPwd(Encrypt.e("admin"));
    admin.setModifydatetime(new Date());
    userDao.saveOrUpdate(admin); 你的Hibernate显示在t(你这里主键显示的的是admin)的主键没有改变的情况下,仍旧插入了一条主键为admin的记录,所以你的主键设置是不是有问题?没有设置好主键的话hibernate不知道怎么往数据库插入
    如果你的主键设置没有问题,那么重写一下saveOrUpdate方法,因为在hibernate和spring整合的工程中,一般都喜欢是用spring的事务处理,但是在dao操作中,会经常出现无法提交操作的情况
    public void saveOrUpdate(Tzgg tzgg){
      Session session = getSession();
      Transaction trans = session.beginTransaction();
      session.saveOrUpdate(tzgg);
      trans.commit();
      session.close();
     }