jeecg3.5中自动构造查询条件的一个比较严重的bug

当数据库字段的类型为数字型,如为integer类型时,如果把该字段设置为查询条件,并且为范围查询,如下:

 <t:dgCol title="统计日期" field="sumDate" query="true" queryMode="group"></t:dgCol>

其中sumDate在数据库中是int型的,这时生成的界面如下:

这时如果输入一个数字型的值,如20150401,会报类型转换错误。

原因是在org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil的这个类中的installHqlJoinAlias方法中拼装查询条件时没有根据字段的类型来判断,原来的代码是这样子的:

// 添加 判断是否有区间值
String beginValue = null;
String endValue = null;
...
//这边没有判断当前的字段是什么类型统一传的都是String类型的值,当字段类型为数字型时会出错
ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.GE, beginValue);
ObjectParseUtil.addCriteria(cq, aliasName,HqlRuleEnum.LE, endValue);

我的解决方案是根据字段的类型判断判断需要传入的类型,如下,

//单独写一个方法来处理类型的判断和转换
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);					
						
					}


你可能感兴趣的:(bug,jeecg3.5)