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

时间: 06-02

Hibernate session缓存的相关文章

hibernate session缓存和java对象生命周期

一.java对象生命周期 1.在java中,使用new关键字,创建一个java对象,jvm就为这个对象分配一块内存空间.只要这个变量被引用,他就一直存在于内存中.如果没有被任何变量引用(包括间接引用),那么这个对象就会被垃圾回收器回收.下面用一段代码来解释: Customer c=new Customer(); Order o1=new Order(); Order 02=new Order(); o1.setCustomer(c); c.getOrders().add(o1); o1=null

Hibernate二级缓存

第一级缓存:事务范围的缓存.Session缓存.存放元数据和预定义SQL.只读缓存. 第二级缓存:进程范围或者集群范围.由SessionFactory负责管理.SessionFactory的外置缓存.SessionFactory这个级别维护的缓存.二级缓存是针对整个应用而不是某个特定的session. Session 如何判断持久化对象的状态的改变呢? Session 加载对象后会为对象值类型的属性复制一份快照.当Session 清理缓存时,比较当前对象和它的快照就可以知道那些属性发生了变化.

Hibernate Session & Transaction详解

Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持久化操作核心API, 注意这里的Session的含义,它与传统意思上web层的HttpSession并没有关系,Hibernate Session之与Hibernate,相当于JDBC Connection相对与JDBC. Session对象是有生命周期的,它以Transaction对象的事务开始和结束边界

[原创]java WEB学习笔记78:Hibernate学习之路---session概述,session缓存(hibernate 一级缓存),数据库的隔离级别,在 MySql 中设置隔离级别,在 Hibernate 中设置隔离级别

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Hibernate(十二)Session缓存与二级缓存

一级缓存主要作用是管理对象. 应用程序级别的缓存(SessionFactory级别的缓存),也叫二级缓存,默认是不开启的. 不管是一级缓存还是二级缓存,都需要根据OID获取对象才有效. package test.hibernate.hbmSecondCache; import java.util.HashSet; import java.util.Set; public class Department { private Integer id; private String name; pri

Hibernate中的Session缓存问题

1. Session 缓存: 1) . 在 Session 接口的实现中包括一系列的 Java 集合 , 这些 Java 集合构成了 Session 缓存 . 它用于存放 Session 关联的对象( Session 关联对象的方式有非常多种. 比如:session.get (Class , OID ). session.update(). session.save ()  ...). 仅仅要 Session 实例没有结束生命周期 , 且没有清理缓存.则存放在它缓存中的对象也不会结束生命周期.

Hibernate强制清除Session缓存 Clear与Flush方法 FlushMode设置

一.Session中FlushMode的设置: 在事务开启前设置FlushMode属性,方法session.setFlushMode(FlushMode.Always|AUTO|COMMIT|NEVER|MANUAL). FlushMode有5个值可选:Always:任何代码都会Flush.AUTO:默认方式–自动.Commit:COMMIT时.Never:始终不.MANUAL:手动方式. 二.Session中flush()方法说明: 可以强制进行从内存到数据库的同步,方法session.flu

hibernate笔记--缓存机制之 一级缓存(session缓存)

一级缓存: 又称为session缓存,它和session生命周期相同,周期非常短.是事务级别的缓存: 还是以Book和Category这两个表为例,我们用代码观察一个缓存的存在: 假设现在我要去查询id=1的Book信息: List<Book> list =(List) session.createQuery("from Book").list(); System.out.println(list.get(0).getName()); Book book = (Book)s

hibernate学习系列-----(3)Session 缓存和持久化生命周期以及Session 基本操作

Session缓存原理 为了能够在控制台更好的看到我们的hibernate干了些什么,可以在hibernate.cfg.xml文件中写入如下配置: <!-- print all generated SQL to the console --> <property name="hibernate.show_sql">true</property> <!-- format SQL in log and console --> <prop