Hibernate三级缓存
一级缓存(session级别的缓存):1.hibernate查询,首先从一级缓存中查询,若是没有则从数据库中查询;当session关闭,缓存就没了。
当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的 list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象。
二级缓存(sessionFactory级别的缓存):1.hibernate不提供二级缓存,需要额外的缓存包EHcache。所以二级缓存需要配置,对象配置了的缓存,二级缓存才起作用。
2.hibernate二级缓存仅仅存的是对象,就算你只想查询出这个对象中的几个属性的值,任然会把这个对象的所有信息都查询出来。
3.若对象配置了二级缓存,hibernate会先从二级缓存中查询,即使session已关闭,hibernate依旧可以从二级缓存中查询到对象信息。
三级缓存(sessionFactory级别的缓存):三级缓存也叫查询缓存,这个缓存是用来缓存HQL语句的,当用list()来两次查询同一个对象,HQL语句会发送两次,当配置了三级缓存,则就是缓存了第一条HQL语句,只有当HQL语句完全不同时,才会重新发送HQL语句。
注:缓存一般只对查询比较对,更改比较少的数据进行设置,若修改较多反而会影响hibernate的效率。
原文:http://my.oschina.net/u/2291124/blog/515924