Session 缓存可减少 Hibernate 应用程序访问数据库的频率。
News news1 = (News) session.get(News.class, 1);
System.out.println(news1);
News news2 = (News) session.get(News.class, 1);
System.out.println(news2);
System.out.println(news2 == news1);
打印结果:
Hibernate:
select
news0_.ID as ID1_0_0_,
news0_.TITLE as TITLE2_0_0_,
news0_.AUTHOR as AUTHOR3_0_0_,
news0_.DATE as DATE4_0_0_
from
NEWS news0_
where
news0_.ID=?
News [id=1, title=java, author=atguigu, date=2015-07-28 11:59:43.0]
News [id=1, title=java, author=atguigu, date=2015-07-28 11:59:43.0]
true
所有hibernate只向数据库发了一条语句。
操作 Session 缓存
flush()使数据表中的记录与session缓存中的状态保持一致,为了保持一致,可能会发送相应的sql语句
1.在transaction的commit方法中:先调用session的flush方法,再提交事务。
2.flush可能会发送sql语句,但不会提交事务
@org.junit.Test
public void TestFlush(){
News news1 = (News) session.get(News.class, 1);
news1.setAuthor("oracle");
}
打印结果
Hibernate:
select
news0_.ID as ID1_0_0_,
news0_.TITLE as TITLE2_0_0_,
news0_.AUTHOR as AUTHOR3_0_0_,
news0_.DATE as DATE4_0_0_
from
NEWS news0_
where
news0_.ID=?
Hibernate:
update
NEWS
set
TITLE=?,
AUTHOR=?,
DATE=?
where
ID=?