在使用querydsl进行开发的时候,使用了BooleanExpression进行了条件构建,原代码如下:
BooleanExpression booleanExpression = qTestPO.status.in("1","2")
.and(qTestPO.createTime.between(startDateTime, endDateTime))
.and(qTestPO.pId.in(pIds));
if (StrUtil.isNotEmpty(cId)) {
booleanExpression.and(qTestPO.cId.eq(cId));
}
在这种情况下,判断中的条件未生效,只有上面的会生效,经过一番排查后发现,在进行.and()
操作后,会new一个新的BooleanExpression对象,所以未生效。将新对象指向booleanExpression即可,修改如下:
BooleanExpression booleanExpression = qTestPO.status.in("1","2")
.and(qTestPO.createTime.between(startDateTime, endDateTime))
.and(qTestPO.pId.in(pIds));
if (StrUtil.isNotEmpty(cId)) {
booleanExpression = booleanExpression.and(qTestPO.cId.eq(cId));
}