分享

Hibernate4.1中createSQLQuery使用查询缓存

 飞鹰飞龙飞天 2014-03-27

 1.在hibernate中createQuery执行hql查询的时候使用查询缓存:

 

  1. getSession().createQuery(hql).setCacheable(true).setCacheRegion("user").list(); 

2.在hibernate中createSQLQuery执行sql时使用查询缓存:

 

  1. getSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(User.class)).setCacheable(true).setCacheRegion("user").list(); 

这样会报错,原因是That's because the aim of the second level cache is to (ultimately) cache entities that Hib knows about. I haven't verified this but I'm not surprised that caching sql query doesn't work as those are not (directly) translated by hibernate into entities. 

解决方法:

It's solutioned adding column's types to the query, using the method "addScalar()"

like this:

 

  1. getSession().createSQLQuery(sql).addScalar("id", IntegerType.INSTANCE) 
  2. .addScalar("name",StringType.INSTANCE) 
  3. .addScalar("age",IntegerType.INSTANCE).setResultTransformer(Transformers.aliasToBean(User.class)) 
  4. .setCacheable(true).setCacheRegion("user").list(); 

ps:hibernate4中addScalar不再是Hibernate.String而是StringType.INSTANCE.docs:http://docs./hibernate/orm/4.1/javadocs/org/hibernate/type/Type.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多