當數據庫字段的類型爲數字型,如爲integer類型時,若是把該字段設置爲查詢條件,而且爲範圍查詢,以下:java
<t:dgCol title="統計日期" field="sumDate" query="true" queryMode="group"></t:dgCol>
其中sumDate在數據庫中是int型的,這時生成的界面以下:數據庫
這時若是輸入一個數字型的值,如20150401,會報類型轉換錯誤。code
緣由是在org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil的這個類中的installHqlJoinAlias方法中拼裝查詢條件時沒有根據字段的類型來判斷,原來的代碼是這樣子的:it
// 添加 判斷是否有區間值 String beginValue = null; String endValue = null; ... //這邊沒有判斷當前的字段是什麼類型統一傳的都是String類型的值,當字段類型爲數字型時會出錯 ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.GE, beginValue); ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.LE, endValue);
個人解決方案是根據字段的類型判斷判斷須要傳入的類型,以下,class
//單獨寫一個方法來處理類型的判斷和轉換 private static void addCriteria(String value, CriteriaQuery cq, String aliasName, HqlRuleEnum rule, String type) { if (StringUtil.isNotEmpty(value)) { if (type.equals("class java.lang.Integer")) { ObjectParseUtil.addCriteria(cq, aliasName, rule, new Integer(value)); } else if (type.equals("class java.lang.Long")) { ObjectParseUtil.addCriteria(cq, aliasName, rule, new Integer(value)); } else if (type.equals("class java.lang.Double")) { ObjectParseUtil.addCriteria(cq, aliasName, rule, new Double(value)); } else if (type.equals("class java.lang.Float")) { ObjectParseUtil.addCriteria(cq, aliasName, rule, new Float(value)); } else { ObjectParseUtil.addCriteria(cq, aliasName, rule, value); } } }
修改後的代碼以下:方法
addCriteria(beginValue, cq, aliasName, HqlRuleEnum.GE, type); addCriteria(endValue, cq, aliasName, HqlRuleEnum.LE, type); //這邊沒有判斷當前的字段是什麼類型統一傳的都是String類型的值,當字段類型爲數字型時會出錯 //ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.GE, beginValue); //ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.LE, endValue); }