記一次iBatis自定義sql的坑
在進行定時任務排程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錯誤判斷語句結尾導致的。