【hibernate框架】核心开发接口-Clear方法与flush方法

简介:
1.Clear方法:无论是load还是get,都会首先查找缓存(一级缓存),如果没有,才会去数据库查找,调用clear()方法可以强制清除session缓存。


示例:
public void testClear(){
	
	Configuration cfg=new AnnotationConfiguration();
	SessionFactory sf=cfg.configure().buildSessionFactory();
	
	Session session=sf.openSession();
	session.beginTransaction();


	Teacher teacher=(Teacher)session.load(Teacher.class, 1);
	System.out.println(teacher.getName()+" "+teacher.getTitle());
	
	//session.clear();//加了就清除缓存	


	Teacher teacher2=(Teacher)session.load(Teacher.class, 1);
	System.out.println(teacher2.getName()+" "+teacher2.getTitle());
	
	session.getTransaction().commit();
	session.close();
	sf.close();


}
根据Load只在请求时发出sql语句的原理,按理说hibernate应该发出两条语句,但是发现只发出来一条sql语句,原因就是get和load首先从缓存中查找信息,如果缓存中没有,才去数据库中查找信息。本例中ID号为1的属性在缓存中已经存在,Load无需再向数据库查询。如果在中间加clear方法,清除缓存中的信息,那就要发出两条sql去查询了。




2.flush方法:可以强制进行从内存到数据库的同步!



示例:
public void testFlush(){
	
	Configuration cfg=new AnnotationConfiguration();
	SessionFactory sf=cfg.configure().buildSessionFactory();
	
	Session session=sf.openSession();
	session.beginTransaction();


	Teacher teacher=(Teacher)session.load(Teacher.class, 1);


	teacher.setZhicheng(ZhiCheng.B);


	//session.flush();//强制缓存中的内容与数据库同步


	teacher.setZhicheng(ZhiCheng.C);


	System.out.println(teacher.getName()+" "+teacher.getTitle());
	session.getTransaction().commit();
	session.close();
	sf.close();


}
只发出来一条Sql语句,是在commit时发出的。你在commit之前就算改一百次,最后只是在commit才会跟新,原因是你一直在缓存里面修改,hibernate并没有在commit之前将缓存中的数据与数据库中的数据同步。加了flush方法之后,就会强制缓存中的内容与数据库同步。


flush方法的补充(不重要):flush是在什么时间去进行数据库的同步的?也就是怎么利用flush。
有session.setFlushMode(FlushMode.XXX);
这里的XXX有:ALWAYS(不论执行任何语句都会Flush)、AUTO(自动Flush,默认的状态)、COMMIT(提交的时候Flush)、MANUAL(手动的Flush)、NEVER(永远不Flush)。


搞这些的用处就是,在调节性能的时候会用。比如说我们现在拿出的结果集只是读,那就没有必要Flush了,可以设为ALWAYS。


但是FlushMode模式很少用到。


find相当于select,去取出对象,但是已经过时。


转载请注明出处:http://blog.csdn.net/acmman

相关文章
|
28天前
|
SQL 缓存 Java
框架分析(9)-Hibernate
框架分析(9)-Hibernate
|
16天前
|
SQL Java 数据库连接
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
Java从入门到精通:3.1.2深入学习Java EE技术——Hibernate与MyBatis等ORM框架的掌握
|
25天前
|
SQL Java 关系型数据库
数据库访问:什么是Hibernate框架?
【4月更文挑战第15天】Hibernate是开源ORM框架,将Java对象与数据库表映射,简化对象-关系映射,提升开发效率和性能。它自动化处理数据操作,支持多种数据库,自动生成SQL,提供配置选项和高级特性,减少手动SQL编写,便于切换数据库。
25 2
|
10月前
|
SQL XML 存储
Hibernate框架【五】——基本映射——多对多映射
Hibernate框架【五】——基本映射——多对多映射
130 0
|
8月前
|
Java 数据库连接
简述使用Hibernate框架的几个步骤
简述使用Hibernate框架的几个步骤
41 0
|
9月前
|
SQL Java 关系型数据库
Hibernate框架概述
Hibernate框架概述
80 0
|
10月前
|
SQL 缓存 Oracle
Hibernate框架【一】——HIbernate框架介绍
Hibernate框架【一】——HIbernate框架介绍
176 0
|
10月前
|
SQL XML Java
Hibernate框架【四】——基本映射——多对一和一对多映射
Hibernate框架【四】——基本映射——多对一和一对多映射
106 0
|
10月前
|
XML 存储 Java
Hibernate框架【三】——基本映射——一对一映射
Hibernate框架【三】——基本映射——一对一映射
48 0
|
10月前
|
Java 数据库连接 数据库
JAVA三大框架Struts、hibernate和spring的各自作用是什么?
JAVA三大框架Struts、hibernate和spring的各自作用是什么?
48 0