ession 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的順序。這在一些復雜的情況下很有用。