日期:2014-05-17  浏览次数:20622 次

[求助]SSH框架,查询出来的对象马上通过setProperty()改变属性后还需要在save()下吗?
代码如下:
private void repairUser() {
Tuser t=(Tuser) userDao.get("from Tuser t where " +
"t.name=? and t.id!=?",new String[]{"admin","0"});
if(t!=null){
t.setName(UUID.randomUUID().toString());
}
Tuser admin=new Tuser();
admin.setId("0");
admin.setName("admin");
admin.setPwd(Encrypt.e("admin"));
admin.setCreatedatetime(new Date());
userDao.saveOrUpdate(admin);
}

在这里我通过Dao查询出来一个Tuser对象,然后通过它的setName("xxx")改变了这个name对象属性,请问还需要在saveOrUpdate一下吗? 
------解决方案--------------------
引用:
Quote: 引用:

需要 。你set的是实体类的值,而并没有保存到数据库。当save的时候  才正式插入数据库
现在的问题是我没有save也保存到数据库了,我一直没明白这个问题.请问这根openSessionInView有关吗?  我web.xml配置了openSessionInView的

跟openSessionInView没有关系吧,openSessionInView只是延长了session的寿命,你的saveOrUpdate也不要用。
------解决方案--------------------
引用:
Quote: 引用:

当从数据库中查出来,如果session没关闭时,那么就是持久状态,当session执行close()或clear()时候,这个对象变为你说的托管态。

那这里岂不是很危险,如果我改变了查询出来的对象属性后spring因其它的原因关闭了这个session,而又启用了另一个session,那不是更新不成功?

你查完之后并且改变了属性,之后关闭session那么在数据库中保存的就是你改变之后的,持久化状态下就是你的对象是什么样子的,关闭session之后,在数据库中保存什么样子的。