天天看点

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

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

示例:

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

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

只发出来一条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