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更新数据库