关于hibernate session.flush()的一个问题

Queryquery=session.createQuery("fromTblUserwherenamelike?");query.setParameter(0,"%je... Query query = session.createQuery("from TblUser where name like ?");
query.setParameter(0, "%jesse%");
List list = query.list();
Iterator<TblUser>users = list.iterator();
while(users.hasNext()){
user = users.next();
user.setName("wangming");
session.flush();
session.evict(user);
}
session.getTransaction().commit();
那句话是update的,工作原理是什么。
展开
 我来答
拿破仑哈哈
2011-09-09 · TA获得超过136个赞
知道小有建树答主
回答量:69
采纳率:0%
帮助的人:45.5万
展开全部
hibernate先对session中托管的bean(一级缓存)进行修改,在执行flush操作时:收集session中所有的bean,检查这些bean和原有备份是否有差异,如果有则生成update sql语句,并执行。
你写的这段代码是有问题的,为什么要在循环中使用session.flush()(影响性能),如果真需要手动flush也可以放在循环外面;另外,通常情况下,可以设置事务提交的时候自动flush或者close。
百度网友3ee0adf
2011-09-09
知道答主
回答量:13
采纳率:100%
帮助的人:21.1万
展开全部
当users通过query从DB里拿出来以后, 它里面的每一个user都是persistent的.
直接给一个persistent的对象赋值user.setName("wangming"); 那么在transaction commit的时候,就会完成update的动作.
在这里, 代码跑到session.flush(); 相当于执行一条update 的SQL, 而直到session.getTransaction().commit(); 才会真正把结果提交到数据库里面去.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d659627
2011-09-09 · TA获得超过363个赞
知道小有建树答主
回答量:161
采纳率:0%
帮助的人:106万
展开全部
flush,但是一般不这样用,太影响性能了,并且这是要定期清除的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lxdlj801109
2011-09-09
知道答主
回答量:1
采纳率:0%
帮助的人:1711
展开全部
通过List list = query.list();加载满足查询条件的对象集合到一级缓存中,当在一级缓存中进行加载对象的属性修改,在你调用session.flush()的时候,会同步一级缓存的对象的状态到数据库中。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式