QueryDsl BooleanBuilder:如何创建一个比较另一个字段的谓词?

时间:2016-03-25 03:56:45

标签: java sql querydsl boolean-expression

我有一个简单的例子:找到售罄的所有商品。

项目有initialQuantity和soldQuantity整数字段。 (由于某种原因,我需要存储initialQuantity)

我尝试做类似的事情:

builder = new BooleanBuilder();
Predicate predicate = builder.and(item.initialQuantity.eq(item.soldQuantity)).getValue();
Iterable<Item> iterable = itemRepository.findAll(predicate);

但它没有按预期返回。 &#34; .EQ()&#34;看起来它需要一个整数而不是Path&lt;&gt;

1 个答案:

答案 0 :(得分:0)

首先声明它:

JPAQueryFactory query = new JPAQueryFactory(em);
BooleanBuilder booleanBuilder = new BooleanBuilder();
QCreditRequest creditRequest = QCreditRequest.creditRequest;

然后,您可以包括您的业务逻辑,例如:

booleanBuilder.and(creditRequest.creditRequestId.eq(dataRequest.getCreditRequestId()));

if (StringUtils.isNotBlank(dataRequest.getProductId())){
                 booleanBuilder.and(creditRequest.product.productId.eq(dataRequest.getProductId()));}

最终返回结果,映射到您的DTO:

return new HashSet<>(
            query
                .select(
                    Projections.constructor(
                        APResponse.class,
                        creditRequest.creditRequestId,
                        creditRequest.creditRequestDate,
                        creditRequest.product.productId,
                        creditRequest.creditRequestComment))
                .from(creditRequest)
                .innerJoin(creditRequest.product, product)
                .innerJoin(creditRequest.status, creditRequestStatus)
                .where(booleanBuilder)
                .fetch());