附加 QueryDSL 谓词或根据过滤器值构建谓词

问题描述

我是 Querydsl 的新手,我正在寻找一种基于过滤器附加/构建谓词的方法。您可以在示例中看到,如果过滤器中的某个字段没有值,则不应进入谓词。

如果这样的事情是不可能的,那么最好的方法是什么?

例如过滤器(GetPaintingRequest)包含这些字段(过滤器中还有更多,但不重要):

public class GetPaintingsRequest {
    private String author;
    private Integer style;
    private String paintingName;

    //.....getters and setters
}

所以在服务类中我想过滤这样的绘画

public List<Painting> getFilteredPaintings(GetPaintingsRequest request) {
        
        QPainting painting = QPainting.painting;
        
        //predicate for all paintings that are not deleted and not sold
        Predicate query = painting.deleted.isFalse().and(painting.isSold.isFalse());
        
        if (!request.getAuthor().equals("")) {
            //append to existing predicate name of the author
            query.and.painting.autor.eq(request.getAuthor()); //obvIoUsly not working - just as an example what I want
            
        }

        if (!request.getPaintingName().equals("")) {
            //append to existing predicate painting name
            query.and.painting.paintingName.eq(request.getPaintingName()); //obvIoUsly not working - just as an example what I want
        }
        
        var paintingList = paintingRepository.findAll(query);

}

解决方法

我找到了解决方案!

#include <stdio.h>

void main() {
    int i,j; //Takes i as 0 with short

    printf("Enter two integers: ");
    scanf("%d %d",&i,&j);

    printf("\n%d & %d = %d\n",i,j,(i & j));
    printf("\n%d ^ %d = %d\n",(i ^ j));
    printf("\n%d | %d = %d\n",(i | j));

    if ((i | j) == (i & j) + (i ^ j))
        printf("\nYES\n");
    else
        printf("\nNO\n");
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...