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);					
						
					}
相关文章
相关标签/搜索