[英]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.