NHibernate Session Flush的作用

session flush方法主要做了两件事:
 * 清理缓存
 * 执行sql
 
session在什么情况下执行flush
 * 默认在事务提交时
 * 显示的调用flush
 * 在执行查询前,如:iterate
 
hibernate按照save(insert),update、delete顺序提交相关操作

例:当我们想以下顺序执行代码(先insert,再update,再insert),代码如下:

 1 session  =  HibernateUtils.getSession();
 2 tx  =  session.beginTransaction();
 3
 4 User3 user  =   new  User3();
 5 user.setId( " 001 " );
 6 user.setName( " 张三 " );
 7     
 8 session.save(user);
 9             
10 user.setName( " 王五 " );
11 session.update(user);
12         
13 User3 user3  =   new  User3();
14 user3.setId( " 002 " );
15 user3.setName( " 李四 " );
16 session.save(user3);
17     
18 // Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
19 // Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
20 // Hibernate: update t_user3 set name=?, password=?, create_time=?, expire_time=? where user_id=?
21 // hibernate按照save(insert),update、delete顺序提交相关操作
22 tx.commit();
执行上面的代码,通过查看日志,得到的执行顺序为insert,insert,update
因此可以用session.flush来实现执行,代码如下:
 1 session  =  HibernateUtils.getSession();
 2 tx  =  session.beginTransaction();
 3
 4 User3 user  =   new  User3();
 5 user.setId( " 003 " );
 6 user.setName( " 张三 " );
 7             
 8 session.save(user);
 9     
10 user.setName( " 王五 " );
11 session.update(user);
12             
13 session.flush();
14         
15 User3 user3  =   new  User3();
16 user3.setId( " 004 " );
17 user3.setName( " 李四 " );
18 session.save(user3);
19         
20 // Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
21 // Hibernate: update t_user3 set name=?, password=?, create_time=?, expire_time=? where user_id=?
22 // Hibernate: insert into t_user3 (name, password, create_time, expire_time, user_id) values (?, ?, ?, ?, ?)
23 // 因为我们在session.udpate(user)后执行了flush,所以在清理缓存时执行flush前的sql不会生成
24 // sql会按照我们的意愿执行
25 tx.commit(); 这样我们就实现insert,update,insert的顺序。这在一些复杂的情况下很有用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值