【求助】Jpa querydsl and和or混合查询生成sql不对的问题

一介布衣萧萧 2018-01-24 11:22:33
使用jpa + querydsl进行复杂查询时,遇到一个问题:当and和or混合时候后,发现生成出来的sql并非预期的接口

代码片段如下:

Role.parentId.in(roleIds)
.or(
Role.id.eq(roleParentId).and(User.id.eq(userId))
)


预期生成的查询条件sql应该是:

role.parentId IN ('1','2') OR ( role.id=3 AND user.id='5' )


但实际生成的sql却是:

role.parentId IN ('1','2') OR role.id=3 AND user.id='5'


实际生成的sql比预期的少了一对括号,导致查询不出结果。
尝试了N种方法,都没能加上这一对括号。

不知道有哪位大大知道怎么处理这种情况
...全文
359 点赞 收藏 5
写回复
5 条回复
有点不nice 01月07日
我遇到同样的问题,用nativeQuery = true可以解决
回复 点赞
Glex 2018年12月19日
引用 3 楼 dong_19890208 的回复:
[quote=引用 2 楼 brantyou 的回复:]
[quote=引用 1 楼 dong_19890208 的回复:]
sql 执行中and的优先级比or的高所以会先判断and条件后判断or条件,所以生成的sql跟你想的sql是等效的,查不出结果应该是其他原因导致的


and的优先级是比or的高,所以查询是要加上一对括号去约束。问题是代码是加了括号约束的,生成的sql因为少了这一层括号,导致意思不一样了。查不到想要的[/quote]
and的优先级高所以不用加括号去约束[/quote]
你的逻辑不对。。。。
他没有达到想要的查询效果,就是要加括号改变这个优先级。
回复 点赞
dong_19890208 2018年01月25日
引用 2 楼 brantyou 的回复:
[quote=引用 1 楼 dong_19890208 的回复:] sql 执行中and的优先级比or的高所以会先判断and条件后判断or条件,所以生成的sql跟你想的sql是等效的,查不出结果应该是其他原因导致的
and的优先级是比or的高,所以查询是要加上一对括号去约束。问题是代码是加了括号约束的,生成的sql因为少了这一层括号,导致意思不一样了。查不到想要的[/quote] and的优先级高所以不用加括号去约束
回复 点赞
一介布衣萧萧 2018年01月25日
引用 1 楼 dong_19890208 的回复:
sql 执行中and的优先级比or的高所以会先判断and条件后判断or条件,所以生成的sql跟你想的sql是等效的,查不出结果应该是其他原因导致的
and的优先级是比or的高,所以查询是要加上一对括号去约束。问题是代码是加了括号约束的,生成的sql因为少了这一层括号,导致意思不一样了。查不到想要的
回复 点赞
dong_19890208 2018年01月25日
sql 执行中and的优先级比or的高所以会先判断and条件后判断or条件,所以生成的sql跟你想的sql是等效的,查不出结果应该是其他原因导致的
回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告