setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)的使用

今天在做一个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的大小写一定要与数据库中的字段一致,否则,即使你查处结果,你也无法获取



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值