记一次iBatis自定义sql的坑
在进行定时任务调度Job时,在执行到service层时,先是报错,原因是service方法未增加@Transaction注解
@Override
@Transactional
public List
,再次调试,控制台打印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错误判断语句结尾导致的。
还没有评论,来说两句吧...