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);
这段代码是执行更新的,加上下面的,更新就不执行了,很郁闷
这是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);
这段代码是执行更新的,加上下面的,更新就不执行了,很郁闷
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);
这段代码是执行更新的,加上下面的,更新就不执行了,很郁闷
admin.setId("admin");
userDao.saveOrUpdate(admin);试试
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,两个一起执行时,上面就不执行更新了。
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();
}