setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)的使用

来源:互联网 发布:十万块钱怎么理财 知乎 编辑:程序博客网 时间:2024/05/22 02:16

今天在做一个Hibernate项目时,当我用SQL进行关联查询的时候,SQL语句及代码如下:

StringBuffer queryBuffer = new StringBuffer();
queryBuffer.append("SELECT lu.loginUserName as loginusername,l.opage as opage,l.userid as userid,"
          +"l.operation as operation,l.sum as sum,l.otime as optime "
          +"from LoginUser lu RIGHT JOIN Log l  on l.userid=lu.id  where 1=1 ");
DaoCommon.setCacheable(false);
DaoCommon.setQueryBufferForAccurateSearch(queryBuffer, log);
DaoCommon.setQueryBuffer(queryBuffer, log.getBeginDate(), " and to_char(l.otime, 'yyyy-MM-dd') >= :beginDate ");
DaoCommon.setQueryBuffer(queryBuffer, log.getFinalDate(), " and to_char(l.otime, 'yyyy-MM-dd') <= :finalDate ");
Query query = this.getHibernateDataDAO().getDAOSession().createQuery(queryBuffer.toString());
DaoCommon.setQueryValueForAccurateSearch(query, log);
DaoCommon.setQueryValue(query, log.getBeginDate(), "beginDate", DateUtils.format("yyyy-MM-dd",log.getBeginDate()));
DaoCommon.setQueryValue(query, log.getFinalDate(), "finalDate", DateUtils.format("yyyy-MM-dd", log.getFinalDate()));
DaoCommon.setQueryPager(query, pager);
//return (List<Log>)query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
return query.list();


刚开始的时候执行程序会报:loginuser is not mapped,之后各种百度发现需要将表名第一个字母大写HQL才会识别表名

当这个错误解决完后,再执行就又报说我的SQL语句错误,原来.createQuery()执行的是HQL语句,自己写的是地道的SQL语句,所以应该调用createSQLQuery()方法、

这些问题解决完了,我发现数据是查出来了,但是在页面端使用ajax无法获取字段值,跳了无数次坑后才发现了最好的解决方法将代码改为如下:

queryBuffer.append("SELECT lu.loginUserName as loginusername,l.opage as opage,l.userid as userid,"

          +"l.operation as operation,l.sum as sum,l.otime as optime "
          +"from LoginUser lu RIGHT JOIN Log l  on l.userid=lu.id  where 1=1 ");

DaoCommon.setCacheable(false);
DaoCommon.setQueryBufferForAccurateSearch(queryBuffer, log);
DaoCommon.setQueryBuffer(queryBuffer, log.getBeginDate(), " and to_char(l.otime, 'yyyy-MM-dd') >= :beginDate ");
DaoCommon.setQueryBuffer(queryBuffer, log.getFinalDate(), " and to_char(l.otime, 'yyyy-MM-dd') <= :finalDate ");
Query query = this.getHibernateDataDAO().getDAOSession().createSQLQuery(queryBuffer.toString());
DaoCommon.setQueryValueForAccurateSearch(query, log);
DaoCommon.setQueryValue(query, log.getBeginDate(), "beginDate", DateUtils.format("yyyy-MM-dd",log.getBeginDate()));
DaoCommon.setQueryValue(query, log.getFinalDate(), "finalDate", DateUtils.format("yyyy-MM-dd", log.getFinalDate()));
DaoCommon.setQueryPager(query, pager);
return (List<Log>)query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();



采用setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();

       setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list()方法返回一个LIst,但是List中的字段是以Map形式封装的,但是该方法有一坑就是在页面端取数据时,Key的大小写一定要与数据库中的字段一致,否则,即使你查处结果,你也无法获取



0 0
原创粉丝点击