文档章节

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

z_jordon
 z_jordon
发布于 2015/04/27 17:03
字数 433
阅读 2115
收藏 0

当数据库字段的类型为数字型,如为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);					
						
					}


© 著作权归作者所有

共有 人打赏支持
z_jordon
粉丝 36
博文 251
码字总数 78212
作品 0
厦门
技术主管
私信 提问
Mybatis 分页插件 3.3.1 发布

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。 该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。 3.3.1更新说明: 该版本主要修...

Liuzh_533
2014/12/08
2.4K
10
BugFree 3.0.1 正式发布!

点击下载BugFree 3.0.1 主要更新如下: 易用性改进 URL引用简化 ../index.php?r=info/index&type=bug&product_id=2 => ../bug/list/2 ../index.php?r=info/edit&type=bug&id=27 => ../bug/2......

红薯
2012/01/03
1K
2
yii2使用原生语句执行数据库操作yii\db\Query和yii\db\Command

某些情况下我们并不需要启用比较重的AR去操作数据库,这里Yii2也为我们提供了 yiidbQuery 查询构造器 只能创建 查询 命令 yiidbCommand sql命令工具 可以创建 curd 操作 两个工具类来满足此类...

big_cat
2016/05/13
556
0
踩坑CBO,解决那些坑爹的SQL优化问题

本文根据DBAplus社群第93期线上分享整理而成。 本次分享大纲: CBO( Cost Based Optimizer)优化器是目前Oracle广泛使用的优化器,其使用统计信息、查询转换等计算各种可能的访问路径成本,并...

丁俊
2017/02/27
0
0
2018-08-22期 Hbase客户端API操作(数据查询,Scan方式)

package cn.itcast.bigdata.hbase; import java.io.IOException; import java.io.InterruptedIOException; import java.util.ArrayList; import java.util.Iterator; import org.apache.comm......

JackmaSong
08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

重磅!亚洲诚信实力斩获:“2018 DigiCert/Symantec 年度最佳创新合作伙伴”大奖

2018年11月13日-16日,全球顶级数字证书厂商,DigiCert/Symantec亚太区圆桌会议(Asia Partner Roundtable 2018)在日本大阪隆重召开。 亚洲诚信作为DigiCert/Symantec亚太区白金战略合作伙伴和...

亚洲诚信
20分钟前
2
0
始于阿里,回归社区:阿里8个项目进入CNCF云原生全景图

摘要: 一群技术理想主义者,与太平洋另一边的技术高手们正面PK,在这场躲不开的战役中,一起认真一把。 破土而出的生命力,源自理想主义者心底对技术的信念。 云原生技术正席卷全球,云原生...

阿里云官方博客
27分钟前
3
0
修改this指向(bind、call 和 apply)

一、bind bind 的其中一个用法就是:绑定函数,使其无论怎么样调用都用相同的 this 示例: var obj = { getThis: function() { console.log(this); }};obj.getThis()...

文文1
今天
1
0
WSL安装JDK8

下载地址 JDK_URL https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html UNLIMITED_STRENGTH_URL https://www.oracle.com/technetwork/java/javase/down......

terwergreen
今天
4
0
sparkStreaming基本概念

概述 Spark Streaming 是 Spark Core API 的扩展, 它支持弹性的, 高吞吐的, 容错的实时数据流的处理. 数据可以通过多种数据源获取, 例如 Kafka, Flume, Kinesis 以及 TCP sockets, 也可以通过...

freeli
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部