1.在hibernate中createQuery执行hql查询的时候使用查询缓存:
- getSession().createQuery(hql).setCacheable(true).setCacheRegion("user").list();
2.在hibernate中createSQLQuery执行sql时使用查询缓存:
- 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:
- getSession().createSQLQuery(sql).addScalar("id", IntegerType.INSTANCE)
- .addScalar("name",StringType.INSTANCE)
- .addScalar("age",IntegerType.INSTANCE).setResultTransformer(Transformers.aliasToBean(User.class))
- .setCacheable(true).setCacheRegion("user").list();
ps:hibernate4中addScalar不再是Hibernate.String而是StringType.INSTANCE.docs:http://docs.jboss.org/hibernate/orm/4.1/javadocs/org/hibernate/type/Type.html
转载于:https://blog.51cto.com/kikoroc/1081270