gpt4 book ai didi

java - 带有查询 Dsl 自定义绑定(bind)和/或操作的 Spring 不起作用

转载 作者:搜寻专家 更新时间:2023-10-31 08:31:47 24 4
gpt4 key购买 nike

我有以下要求查询:

"/article?category=kitchen&category=sports"

此查询在没有自定义绑定(bind)的情况下工作。它会给我所有的厨房和运动文章作为回应。它正在以某种方式进行 OR 操作。

但我需要自定义绑定(bind),因为我需要忽略大小写。现在我正在使用这个自定义绑定(bind):

@Repository
public interface ArticleRepository extends JpaRepository<Article, Long>,
QueryDslPredicateExecutor<QArticle>, QuerydslBinderCustomizer<QArticle> {


@Override
default public void customize(QuerydslBindings bindings, QArticle article) {

bindings.bind(String.class).first((StringPath path, String value) -> path.containsIgnoreCase(value));
}
}

这只会过滤属性的第一个可用值。所以在这种情况下,它只给出厨房类别中的文章作为响应。忽略类别(体育)的第二个值。

现在我的问题是:如何在忽略大小写的情况下获取两个类别的文章?我需要在我的自定义绑定(bind)中更改什么才能实现这一点?

非常感谢

最佳答案

QuerydslBindings.TypeBinder#首先使用 single value binding .您需要使用 QuerydslBindings.TypeBinder# all .该方法在一个 multivalue binding .

我在 answer 中提供了几个如何自定义绑定(bind)的示例.像这样的东西应该适合你:

@Override
default public void customize(QuerydslBindings bindings, QArticle article) {
// using explicit path bindings
bindings.bind(article.category).all((path, values) -> {
BooleanBuilder predicate = new BooleanBuilder();
// with a for loop
for (String value : values) {
predicate.or(path.containsIgnoreCase(value));
}
});

// using a type binding
bindings.bind(String.class).all((StringPath path, Collection<? extends String> values) -> {
BooleanBuilder predicate = new BooleanBuilder();
// oneliner with Java 8 forEach
values.forEach( value -> predicate.or(path.containsIgnoreCase(value) );
});

}

关于java - 带有查询 Dsl 自定义绑定(bind)和/或操作的 Spring 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42700008/

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