繁体   English   中英

QueryDSL动态谓词链接

[英]QueryDSL dynamic predicate chaining

如何使用QueryDSL动态建立和链接谓词。

我有一个带有数据表的UI。 每列都有一个框,您可以在其中输入一个过滤条件。 像这样:

用户界面

在上面的示例中,eventno过滤器=“ 0288”,地址过滤器=“驱动器”。 然后,UI将这些内容发送到分页对象中的后端,该对象包含列名称和过滤字符串的映射。 像这样:

分页

现在,在使用QueryDSL的后端中,我需要根据为各列提供的术语动态构建谓词。 我仅针对address事件和address列尝试过此操作,但似乎并未同时过滤两者。

public Page<EpisodeDashboard> getPage(int pageNumber, int pageSize, Sort sort, PaginationCriteria pagination) {
    BooleanBuilder where = new BooleanBuilder();
    if (pagination.getFilterBy().getMapOfFilters().get("eventno")!=null) {
        where.and(qEpisode.eventno.containsIgnoreCase(pagination.getFilterBy().getMapOfFilters().get("eventno")));
        }
    if (pagination.getFilterBy().getMapOfFilters().get("address")!=null) {
        where.and(qEpisode.address.formattedAddress.containsIgnoreCase(pagination.getFilterBy().getMapOfFilters().get("address")));
        }
    List<Episode> e = episodeRepository.findAll(where);

我可能希望散列表中的每个键/值都带有a的东西来动态构造谓词。

上面的代码实际上有效,但是:

episodeRepository.findAll(where);

返回一个可迭代的对象,并且我的大多数项目都使用List。 因此,我将Episode Repo修改为覆盖以下内容:

    @Override
    List<Episode> findAll(Predicate predicate);

现在,将返回一个列表,并且代码可以正常工作。 如果可以通过遍历分页过滤器哈希图来生成“ if”语句,则可以增强此答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM