首页 > 代码库 > Hibernate session缓存

Hibernate session缓存

一级缓存(执行代码时查看console台上的sql语句)

 清空缓存

@Test
public void demo03(){
//清空缓存
Session session=factory.openSession();
session.beginTransaction();

//1.查询
User user = (User)session.get(User.class, 1);
System.out.println(user);

//session.evitc(user) //将执行对象从一级缓存移除
//session.clear(); //将一级缓存所有内容清空
//session.close(); //关闭session,之后不能操作,否则将抛异常。如果session关闭,一级缓存销毁了,不能与另一个session共享数据
//2.再查询--默认情况从一级缓存获得内容
User user1 = (User)session.get(User.class, 1);
System.out.println(user1);

session.getTransaction().commit();
session.close();
}

    快照

快照:一级缓存中同样数据的一个备份,通过api不能直接操作,hibernate自己维护。用于将一级缓存中的数据与数据库 保持一致

技术分享

技术分享

刷出缓存:表示一级缓存与快照进行对比。

     修改刷出缓存时机:flushModel来进行设置。

技术分享

1.get查询,结果存放一级缓存

2.修改内容。user.setUsername("jack");//数据不一致

3.1 当执行Query进行查询时,将先执行update语句,及查询到最新。

3.2 transaction.commit():执行提交时去刷新

3.3 session.flush() 手动的将缓存刷新

  API

save.将瞬时对象  缓存 持久态对象

     主键生成策略 native:当执行save方法,将触发insert,让数据生成OID,当commit之后数据进入数据库

     主键生成策略 assigned:必须手动的设置OID,然后执行save,当提交时触发insert

update:将脱管 转换 持久

    通过OID更新数据库

 

    

 

Hibernate session缓存