hibernate的一级缓存问题

1.证明一级缓存的问题

          

    输出结果:

               

               只发出一条查询语句  第二条查询语句没有执行

                 因为第一条查询语句缓存的存在

 2.

                 移除缓存:

            

           

              输出结果:

                         

 3.一级缓存的快照

                       就是对一级缓存的数据备份

                      保证数据库的数据与 一级缓存的数据必须一致。

                      如果一级缓存修改了,在执行commit提交时,将自动刷新一级缓存,执行update语句,将一级缓存的数据更新到数据库。  

4.   refresh 刷新

l  refresh 保证 一级缓存的数据 与 数据库的数据 保持一致。将执行select语句查询数据库,将一级缓存中的数据覆盖掉。只要执行refresh都将执行select语句。

 

输出结果:

         刷新一次 就会执行一次select语句为了缓存中的数据与数据库中的数据保持一致

4.1   快照演示(一级缓存刷新)

 

                     问题:一级缓存什么时候刷新?(了解)

                               默认情况提交(commit())刷新。

User u = (User) session.get(User.class,"1");
System.out.println(u);
//修改持久态对象内容(一级缓存内容)--默认在commit时,将触发update语句。
u.setUsername("rose1");
System.out.println(u);

输出结果:

Hibernate:
select
user0_.id as id0_0_,
user0_.username as username0_0_,
user0_.password as password0_0_
from
t_user user0_
where
user0_.id=?
User [id=1, username=rose, password=1234]
User [id=1, username=rose1, password=1234]
Hibernate:
update
t_user
set
username=?,
password=?
where
id=?

原文地址:https://www.cnblogs.com/fjkgrbk/p/hibernate_catch.html