jeecg3.5中自動構造查詢條件的一個比較嚴重的bug

當數據庫字段的類型爲數字型,如爲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);					
						
					}
相關文章
相關標籤/搜索