记一次iBatis自定义sql的坑

来源:互联网 发布:php商城板块 编辑:程序博客网 时间:2024/05/21 22:46

在进行定时任务调度Job时,在执行到service层时,先是报错,原因是service方法未增加@Transaction注解

@Override
    @Transactional
    public List<Object[]> modelListBySql(Map<String, Object> paraMap)
    {
        return null;
    }

,再次调试,控制台打印sql语句,但是似乎程序停止了一样没有任何反应,然后在Dao层将封装的查询方法放到dao了添加断点调试。


public List findListBySqlId(String sqlId, Map<?, ?> paraMap)
    /*     */   {
    /* 195 */     List list = null;
    /*     */     try {
    /* 197 */       String hql = getSqlStatementById(sqlId, paraMap);
    /* 198 */       if (StringUtils.isNotBlank(hql)) {
    /* 199 */         Query query = getSession().createSQLQuery(hql);
    /* 200 */         query.setCacheable(SysPropertiesUtil.getBoolean("use_query_cache", false));
    /* 201 */         setQueryParameters(query, paraMap);
    /* 202 */         list = query.list();
    /*     */       } else {
    /* 204 */         throw new BasalException(BasalException.ERROR, "未在 SqlMap配置文件中配置, ID为" + sqlId + 
    /* 205 */           "hql 语句");
    /*     */       }
    /*     */     } catch (Exception e) {
    /* 208 */       throw new BasalException(BasalException.ERROR, e.getCause().getMessage(), e.getCause());
    /*     */     }
    /* 210 */     return list;
    /*     */   }


代码走到list = query.list();后同样没有任何反应,生成的sql语句在本地执行也没有任何问题。后来将配置文件中的语句整体再包一层来查询问题解决,这可能是sql拼接时,多表关联查询导致,ibatis错误判断语句结尾导致的。