`

hibernate的Query查询的缓存的问题

 
阅读更多

本文章是比较肤浅的hibernate缓存理解,缓存使用的不好会造成1+N查询的问题,会很浪费数据库资源。缓存不提倡什么方法都使用,我觉得只有真正需要的地方才少量使用比较适合。

 

最近在检查hibernate的HQL语句,发现我使用的hibernate的缓存查询方法出现了奇怪的问题。

我的缓存查询方法核心代码如下:

 

 

session.setCacheMode(CacheMode.NORMAL);//hibernate的session
Query q = session.createQuery(hql);//hibernate的query
q.setCacheable(true);//设置使用缓存,默认不使用

这样每次调用该方法进行查询时就会使用缓存(如果你的po配置了缓存的话)

 

我使用hibernate的2表关联查询 from a,b where a.id=b.id and a.type=?

我的mapping文件中,我的a对象的mapping定义了

 

<cache usage="read-write" />

 

而b则没有,结果第一次查询语句输出没什么问题,但是第二次开始,后台的输出每次刷新页面都会有类似:

 

select b.id,b.name.b.age ..... from b where b.id=?
 

 

这样的语句输出。我觉得很奇怪,以为语句出问题了,因为要输出语句应该也是输出2表关联查询的语句才对,怎么单独出现查询其中一个表的sql语句呢?难道我的多表关联查询没作用??后来我把缓存的使用关闭,也就是

 

q.setCacheable(false);//不使用缓存

 这样测试,控制台输出的都是关联2个表查询的sql语句,这样说来关联查询是正常使用的,而一旦使用了缓存,则只会出现一个表单独再查的情况。后来仔细分析发现原来开启了缓存查询,而没有把被查询的对象po设置

 

<cache usage="read-write" />

 

 

 hibernate 就会不断的从数据库查询对象。后来我把b的mapping也加上了

 

<cache usage="read-write" />
 

就不再出现单查b的语句了,因为都有缓存了。直接从缓存中读取数据,直到缓存消失。

 

分享到:
评论

相关推荐

    7:Hibernate查询缓存及实现.PPT

    7:Hibernate查询缓存Query Cache及实现

    hibernate 3中的缓存小结

    为此,Hibernate提供了针对条件查询的Query Cache。 2.3.2. 什么样的数据适合存放到第二级缓存中? 1 很少被修改的数据 2 不是很重要的数据,允许出现偶尔并发的数据 3 不会被并发访问的数据 4 参考数据,指的是供应...

    hibernate二级缓存

    Hibernate二级缓存 在一个数据库系统中,如果缓存设置的... hibernate.cache.use_query_cache必须配置,如果想缓存使用findall()、list()、Iterator()、createCriteria()、 createQuery()等方法获得的数据结果集。

    Hibernate_二级缓存总结

    QueryCache 用来缓存查询语句 , 及查询结果集中对象的 Identifier 与 Type. 当再次使用已缓存的 Query 时 , 就可以通过对象的 Identifier 与 Type 在 SECOND LEVEL CACHE 中查找实际的对象 . 对于查询缓存来说,...

    hibernate4.0使用二级缓存jar包

    -- 查询的二级缓存配置 --&gt; &lt;property name="hibernate.cache.use_query_cache"&gt;true &lt;property name="cache.provider_class"&gt;org.hibernate.cache.EhCacheProvider 4.0配置如下: &lt;property name="hibernate...

    Spring 整合 Hibernate 时启用二级缓存实例详解

    Spring 整合 Hibernate 时启用二级缓存实例详解 写在前面:  1. 本例使用 Hibernate3 + Spring3;  2. 本例的查询使用了 HibernateTemplate;...&lt;prop key=hibernate.cache.use_query_cache&gt;true &lt;!-

    grails-redis-hibernate-cache:Grails 与 Redis 的集成作为 Hibernate 二级缓存的后端

    Grails Redis Hibernate 二级缓存 这个插件简化了 Grails Hibernate 2nd Level 缓存和 Redis 之间的集成。 安装 要安装,您需要将插件添加到 BuildConfig.groovy 中 compile " :redis-hibernate-cache:1.0 " 还有这...

    hibernate操作数据库笔记

    一.使用Hibernate的Session对象操作数据库 1.初始化Hibernate:在要使用Hibernate的类的方法中实例化Configuration对象并用Configuration对象的configure()方法将hibernate... //HQL(Hibernate Query Language)语句查询

    hibernate3.2中文文档(chm格式)

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    HibernateAPI中文版.chm

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    Hibernate+中文文档

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    Hibernate 中文 html 帮助文档

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    Hibernate学习笔记

    001 Hibernate 简介(开源 O/R 映射框架) 002 第一个 Hibernate 示例 003 hibernate 主要接口介绍 004 持久对象的生命周期介绍 005 query 接口初步 ...028 hibernate 缓存(性能优化策略) 029 hibernate 抓取策略

    hibernate 教程

    Hibernate查询语言(Query Language), 即HQL 11.1. 大小写敏感性(Case Sensitivity) 11.2. from 子句 11.3. 联合(Associations)和连接(joins) 11.4. select子句 11.5. 统计函数(Aggregate ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    hibernate学习文档

    hibernate 学习资料 Session接口 Query和Criteria接口 Hibernate主键介绍 二级缓存的管理

    Hibernate中文详细学习文档

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    hibernate 体系结构与配置 参考文档(html)

    二级缓存与查询缓存 3.4.5. 查询语言中的替换 3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. ...

    最全Hibernate 参考文档

    19.4. 查询缓存(The Query Cache) 19.5. 理解集合性能(Understanding Collection performance) 19.5.1. 分类(Taxonomy) 19.5.2. Lists, maps 和sets用于更新效率最高 19.5.3. Bag和list是反向集合类中效率...

    Hibernate教程

    20.4. 查询缓存(The Query Cache) 20.5. 理解集合性能(Understanding Collection performance) 20.5.1. 分类(Taxonomy) 20.5.2. Lists, maps 和sets用于更新效率最高 20.5.3. Bag和list是反向集合类中效率...

Global site tag (gtag.js) - Google Analytics