hibernate,hql与sql的缓存使用 setResultTransformer的用法
2018-01-11 18:19
405 查看
hibernate,hql与sql的缓存使用 http://blog.csdn.net/diquren/article/details/23695293
getSessionFactory().evictQueries(); //清除缓存
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();
转自:http://www.360doc.com/content/14/0331/13/16589843_365170644.shtml
setResultTransformer的用法 http://blog.csdn.net/sinat_24928447/article/details/47746397
用于将数据库查询到的数据打包成临时的包装类,结合EL表达式来展示,例如报表什么的。
基本就分两种,写法如下:
hql:Query query = session.createQuery("select id , account , password from User")
.setResultTransformer(new AliasToBeanResultTransformer(U.class))
sql:Query query = session.createSQLQuery("select CN_ID as id ,CN_ACCOUNT as account ,CN_PASSWORD as password from TN_USER")
.addScalar("id", Hibernate.INTEGER)
.addScalar("account",Hibernate.STRING)
.addScalar("password",Hibernate.STRING)
.setResultTransformer(Transformers.aliasToBean(U.class));
getSessionFactory().evictQueries(); //清除缓存
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();
转自:http://www.360doc.com/content/14/0331/13/16589843_365170644.shtml
setResultTransformer的用法 http://blog.csdn.net/sinat_24928447/article/details/47746397
用于将数据库查询到的数据打包成临时的包装类,结合EL表达式来展示,例如报表什么的。
基本就分两种,写法如下:
hql:Query query = session.createQuery("select id , account , password from User")
.setResultTransformer(new AliasToBeanResultTransformer(U.class))
sql:Query query = session.createSQLQuery("select CN_ID as id ,CN_ACCOUNT as account ,CN_PASSWORD as password from TN_USER")
.addScalar("id", Hibernate.INTEGER)
.addScalar("account",Hibernate.STRING)
.addScalar("password",Hibernate.STRING)
.setResultTransformer(Transformers.aliasToBean(U.class));
相关文章推荐
- hibernate 使用sql 查询利用setResultTransformer查询出封装好的VO对象
- hibernate 使用sql 查询(setResultTransformer)
- Hibernate 里 SQL 和 HQL,Criteria Query 对Session Cache缓存使用的不同
- hibernate,hql与sql的缓存使用
- hibernate (SQLQuery)query.setResultTransformer
- hibernate里createSQLQuery的addEntity()和setResultTransformer()方法
- 写在hibernate里面的sql setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
- hibernate 使用 HQL 和 SQL
- MySql中查询缓存以及sql_cache、sql_buffer_result用法
- 使用Hibernate的setFirstResult,setMaxResults实现数据库分页
- hibernate4中使用createSQLQuery方法执行sql语句的用法
- 使用hibernate中的hql进行分页设置setMaxResults(int a)出错
- 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma
- hibernate addEntity setResultTransformer
- hibernate分组与聚合查询(原生sql和使用case when then else end的hql)
- createSQLQuery的addEntity跟setResultTransformer方法
- Hibernate 使用createSQLQuery查询时,缓存问题
- hibernate使用hql和sql查询总记录数和注意事项
- java.sql.Result.setFetchDirection(int direction)无法使用?
- setResultTransformer的用法