[求助]SSH框架,查询出来的对象马上通过setProperty()改变属性后还需要在save()下吗?

kevin-go 2014-03-09 05:51:49
代码如下:
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一下吗?
...全文
163 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kevin-go 2014-03-10
  • 打赏
  • 举报
回复
引用 6 楼 fengge374043291 的回复:
你从数据库查出来的 对象 应该是持久化状态的,在持久化状态下修改属性,最后在session关闭的时候应该同样会保存到数据库中,所以及时你没有显示调用save,依然会保存,我的理解。
不是查询出这个对象后,session会关闭吗?那session关闭后再setName("xxx"),hibernate也知道要去保存吗? 按你这么说来如果我从数据库查询出来的对象就是持久化态的,那什么时候会变成托管态?
永不言败snow 2014-03-10
  • 打赏
  • 举报
回复
你从数据库查出来的 对象 应该是持久化状态的,在持久化状态下修改属性,最后在session关闭的时候应该同样会保存到数据库中,所以及时你没有显示调用save,依然会保存,我的理解。
kevin-go 2014-03-10
  • 打赏
  • 举报
回复
引用 4 楼 zhangxiaojie0321 的回复:
引用 3 楼 tyBaoErGe 的回复:
[quote=引用 2 楼 zhangxiaojie0321 的回复:] 需要 。你set的是实体类的值,而并没有保存到数据库。当save的时候 才正式插入数据库
现在的问题是我没有save也保存到数据库了,我一直没明白这个问题.请问这根openSessionInView有关吗? 我web.xml配置了openSessionInView的
跟openSessionInView没有关系吧,openSessionInView只是延长了session的寿命,你的saveOrUpdate也不要用。[/quote] 这个问题已经把我搅浑了 , 我刚开始觉得如果这里不用dao去save下这个对象的话,那么action在调用这个service里的这个方法的时候,坑定不会更新数据库中的name属性,那这里的t对象就是个托管态,但是当我测试的时候,前端调用相应的action,action调用到了改service的这个方法成功,我去数据库查询该对象,发现这个setName()修改了t对象,我真的很纳闷.....这个SSH到底是怎么办到的?
ay转身遇 2014-03-10
  • 打赏
  • 举报
回复
引用 3 楼 tyBaoErGe 的回复:
引用 2 楼 zhangxiaojie0321 的回复:
需要 。你set的是实体类的值,而并没有保存到数据库。当save的时候 才正式插入数据库
现在的问题是我没有save也保存到数据库了,我一直没明白这个问题.请问这根openSessionInView有关吗? 我web.xml配置了openSessionInView的
跟openSessionInView没有关系吧,openSessionInView只是延长了session的寿命,你的saveOrUpdate也不要用。
kevin-go 2014-03-10
  • 打赏
  • 举报
回复
引用 2 楼 zhangxiaojie0321 的回复:
需要 。你set的是实体类的值,而并没有保存到数据库。当save的时候 才正式插入数据库
现在的问题是我没有save也保存到数据库了,我一直没明白这个问题.请问这根openSessionInView有关吗? 我web.xml配置了openSessionInView的
kevin-go 2014-03-10
  • 打赏
  • 举报
回复
引用 10 楼 fengge374043291 的回复:
[quote=引用 9 楼 tyBaoErGe 的回复:] [quote=引用 8 楼 fengge374043291 的回复:] 当从数据库中查出来,如果session没关闭时,那么就是持久状态,当session执行close()或clear()时候,这个对象变为你说的托管态。
那这里岂不是很危险,如果我改变了查询出来的对象属性后spring因其它的原因关闭了这个session,而又启用了另一个session,那不是更新不成功?[/quote] 你查完之后并且改变了属性,之后关闭session那么在数据库中保存的就是你改变之后的,持久化状态下就是你的对象是什么样子的,关闭session之后,在数据库中保存什么样子的。[/quote]明白了,谢谢
永不言败snow 2014-03-10
  • 打赏
  • 举报
回复
引用 9 楼 tyBaoErGe 的回复:
[quote=引用 8 楼 fengge374043291 的回复:] 当从数据库中查出来,如果session没关闭时,那么就是持久状态,当session执行close()或clear()时候,这个对象变为你说的托管态。
那这里岂不是很危险,如果我改变了查询出来的对象属性后spring因其它的原因关闭了这个session,而又启用了另一个session,那不是更新不成功?[/quote] 你查完之后并且改变了属性,之后关闭session那么在数据库中保存的就是你改变之后的,持久化状态下就是你的对象是什么样子的,关闭session之后,在数据库中保存什么样子的。
kevin-go 2014-03-10
  • 打赏
  • 举报
回复
引用 8 楼 fengge374043291 的回复:
当从数据库中查出来,如果session没关闭时,那么就是持久状态,当session执行close()或clear()时候,这个对象变为你说的托管态。
那这里岂不是很危险,如果我改变了查询出来的对象属性后spring因其它的原因关闭了这个session,而又启用了另一个session,那不是更新不成功?
永不言败snow 2014-03-10
  • 打赏
  • 举报
回复
当从数据库中查出来,如果session没关闭时,那么就是持久状态,当session执行close()或clear()时候,这个对象变为你说的托管态。
ay转身遇 2014-03-09
  • 打赏
  • 举报
回复
需要 。你set的是实体类的值,而并没有保存到数据库。当save的时候 才正式插入数据库
line_lin 2014-03-09
  • 打赏
  • 举报
回复
需要啊,不然数据库怎么知道你数据变化了。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧