既然你的name是唯一的,你再插入name为admin的当然不行吧

解决方案 »

  1.   

    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);
      

  2.   

    Tuser t = userDao.get("from Tuser t where t.name = 'admin' and t.id != 'admin'");
    if (t != null) {
    t.setName(UUID.randomUUID().toString());
    }在单独使用的时候实现了更新啊
      

  3.   


    要结果就去试,要原因就去读hibernate。
      

  4.   

    事务结束的时候才提交了update,你要想在事务中间提交先提交一部分就手动提交
      

  5.   

    首先从第一个列子来看:通过session.get或load或缺的实体此时它处理持久状态(Persistent),此状态下
    1、每个持久态对象都于一个Session对象关联
    2、处于持久态的对象是于数据库中的记录相关联的
    3、Hibernate会根据持久态对象的属性的变化而改变数据库中的相应记录
    所以在你修改它的name值的时候他会与数据库同步所以就会发出update语句.
    再看第二个列子:首先hibernate是先执行查询语句的也就是select语句,再去执行insert语句最后在去执行update,delete语句,因为你name是唯一的所以在执行insert的时候就报错了它就不会执行update语句了,如果想先执行update可以在修改name后执行flush