jeecg3.5中自动构造查询条件的一个比较严重的bug
博客专区 > z_jordon 的博客 > 博客详情
jeecg3.5中自动构造查询条件的一个比较严重的bug
z_jordon 发表于3年前
jeecg3.5中自动构造查询条件的一个比较严重的bug
  • 发表于 3年前
  • 阅读 1625
  • 收藏 0
  • 点赞 0
  • 评论 0

华为云·免费上云实践>>>   

摘要: 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);					
						
					}


标签: jeecg3.5 bug
共有 人打赏支持
粉丝 36
博文 234
码字总数 72739
×
z_jordon
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: