码迷,mamicode.com
首页 > Web开发 > 详细

hibernate缓存机制

时间:2017-07-15 01:50:14      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:res   path   实体   clear   ssi   属性   返回   target   数据库查询   

hibernate一级缓存

1.Hibernate一级缓存又称为“Session缓存”,“会话级缓存”。

2.通过Session从数据库查询实体时会把实体在内存中存储起来,下一次查询同一实体时不再从数据库获取,而是从内存中获取,这就是缓存

3.一级缓存的生命周期和Session相同,Session销毁,它也销毁。

4.一级缓存中的数据可适用范围在当前会话之内。

 

管理一级缓存的API

1.evict(),用于将某个对象从Session的一级缓存中清除。

2.clear(),用于将一级缓存中的所有对象全部清除。

 

Qurey.list()和Qurey.iterate()

1.Qurey.list()查询数据,不会从缓存中查找,直接向数据库发送sql语句,将查询返回的对象保留在缓存中。

2.Qurey.iterate()直接向数据库发送sql,查询id,当需要使用对象其他属性的时候,先在缓存中根据id查找对象,如果没有则向数据库发送sql查询,因此单独用该方法查询会产生N+1问题(即向数据库发送N+1条语句查询N个对象的信息)

 

hibernate二级缓存(SessionFactory缓存)

1.添加在hibernate.cfg.xml里面的配置

        <!-- 开启二级缓存 -->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <!-- 二级缓存的提供类 在hibernate4.0版本以后我们都是配置这个属性来指定二级缓存的提供类-->
        <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
        <!-- 二级缓存配置文件的位置 -->
        <property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property>

2.配置ehcache.xml具体见http://www.cnblogs.com/kundeg/p/7172428.html 

3.通过注释配置entity,在类前加上@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)

 CacheConcurrencyStrategy属性值常见的有READ_ONLY(对该entity对应的表数据只读取然后缓存)和READ-WIRTE(对表数据可以读取也可以更新)

4,一定要注意:hibernate二级缓存的必须是整个对象,如果查询的只是对象某些属性,那么该对象不会被缓存

 

hibernate的三种状态(transient(瞬时状态),persistent(持久化状态)以及detached(离线状态))

 详情见http://www.cnblogs.com/xiaoluo501395377/p/3380270.html

 

hibernate缓存机制

标签:res   path   实体   clear   ssi   属性   返回   target   数据库查询   

原文地址:http://www.cnblogs.com/kundeg/p/7173521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!