gpt4 book ai didi

java - QueryDSL 动态谓词链

转载 作者:太空宇宙 更新时间:2023-11-04 10:54:30 27 4
gpt4 key购买 nike

How to use QueryDSL to dynamically build and chain predicates.

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

UI

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

Pagination

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

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);

我可能想要 HashMap 中每个键/值都有一个 a 来动态构造谓词。

最佳答案

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

episodeRepository.findAll(where);

返回一个可迭代对象,我的大部分项目都使用 List。所以我修改了 Episode Repo,并覆盖为:

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

现在返回一个列表并且代码可以工作。如果可以通过迭代分页过滤器 HashMap 来生成“if”语句,则可以对此答案进行增强。

关于java - QueryDSL 动态谓词链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47444447/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com