Score
0
Watch 3.4K Star 8.5K Fork 3.8K

卓源软件 / JeeSite 4.1JavaAGPL-3.0

相同字段andBracket会导致后一个字段消失

Open
Barry  Opened this issue

该问题是怎么引起的?

比如sqlMap().getWhere().andBracket("name",QueryType.EQ,"a").endBracket(1)
sqlMap().getWhere().andBracket("age",QueryType.EQ,18).or("name",QueryType.EQ,"b").endBracket(1)
ps:上面只是打个比方,无需考虑合理性
产生的sql为:select * from table where name='a' and (age=18)
or name = b这个条件就少了

重现步骤

报错信息

6732 thinkgem 1578914432 total 2 participants

Comments (3)

6732 thinkgem 1578914432
卓源软件 2020-05-28 18:31 owner

endBracket(1),这个1参数是索引,要和andBracket最后一个参数匹配。

Barry 2020-05-29 11:02

endBracket(1),这个1参数是索引,要和andBracket最后一个参数匹配。

@卓源软件
好像多个andBracket里面参数不能有相同的,不仅仅是最后一个参数匹配

sqlMap.getWhere().andBracket("b", QueryType.EQ, "1").endBracket(1);
sqlMap.getWhere().andBracket("b", QueryType.EQ, "2").or("c", QueryType.EQ, "3").endBracket(2);

这样产生sql是(b=2) or c=3) 这里少了第一个参数,而且括号也不对
改成下面sql,endBracket参数改成1

sqlMap.getWhere().andBracket("b", QueryType.EQ, "1").endBracket(1);
sqlMap.getWhere().andBracket("b", QueryType.EQ, "2").or("c", QueryType.EQ, "3").endBracket(1);

这样产生sql是(b=2) or c=3 也是不对的
但是只要参数不一样,就正确的,比如:

sqlMap.getWhere().andBracket("a", QueryType.EQ, "1").endBracket(1);
sqlMap.getWhere().andBracket("b", QueryType.EQ, "2").or("c", QueryType.EQ, "3").endBracket(2);

这样产生sql是(a=1) or (b=2 or c=3) 这是没问题的,
是不是多个andBracket,如果有参数重复的就不能用了吗

6732 thinkgem 1578914432
卓源软件 2020-06-01 17:11 owner

@Barry 相同的字段名重复定义,会覆盖上一次的,如果 b 一个 实体里 set 2 次,只能得到1个,所以让你加上索引,不只是结束加,开始也加,如这样,得到的结果一定是对的:

System.out.println(new Config().getSqlMap().getWhere()
	.andBracket("b", QueryType.EQ, "1", 1).endBracket(1)
	.andBracket("b", QueryType.EQ, "2", 2)
            .or("c", QueryType.EQ, "3", 2).endBracket(2)
	.toSql());
System.out.println(new Config().getSqlMap().getWhere()
	.andBracket("b", QueryType.EQ, "2", 1)
            .or("c", QueryType.EQ, "3", 1).endBracket(1)
	.andBracket("b", QueryType.EQ, "2", 2)
            .or("c", QueryType.EQ, "3", 2).endBracket(2)
	.toSql());
System.out.println(new Config().getSqlMap().getWhere()
	.andBracket("a", QueryType.EQ, "1", 1).endBracket(1)
	.andBracket("b", QueryType.EQ, "2", 2)
            .or("c", QueryType.EQ, "3", 2).endBracket(2)
	.toSql());
				

Sign in to comment

Assignees
Labels
Not set
Projects
Milestones
Branches
Planed to start
Not set
Planed to end
Not set
Top level
Priority
Java
1
https://gitee.com/thinkgem/jeesite4.git
git@gitee.com:thinkgem/jeesite4.git
thinkgem
jeesite4
JeeSite 4.1

Help Search

182353 aa51c838 1899542 205747 347fc4a1 1899542