JPA CriteriaBuilder将合并条件合并为析取条件
我需要将此查询复制到 代码中:
....where
article.client_id = 1
and article.price > 0
and (
article.code like '%this is statement%'
or article.oem_code like '%this is statement%'
or (
article.description like '%this%'
and article.description like '%is%'
and article.description like '%statement%'
)
)
这是我的代码:
...Root<Article> article = cq.from(Article.class);
List<Predicate> predicates = new ArrayList<Predicate>();
predicates.add(cb.equal(article.get(Article_.clientId), filter.getClientId()));
predicates.add(cb.greaterThan(article.get(Article_.price), BigDecimal.ZERO));
String searchQuery = filter.getSearchQuery();
Predicate disjunction = cb.disjunction();
disjunction.getExpressions().add(cb.like(article.get(Article_.code), "%" + searchQuery + "%"));
disjunction.getExpressions().add(cb.like(article.get(Article_.oem_code), "%" + searchQuery + "%"));
List<Predicate> andPredicate = new ArrayList<Predicate>();
for (String str : searchQuery.split(" ")) {
andPredicate.add(cb.like(article.get(Article_.description), "%" + str + "%"));
}
现在,如何将其添加andPredicate
到析取谓词中?在getExpressions().add(...)
不采取Predicate
为PARAM。
谢谢
回答:
所以这就是我所做的,并且看起来工作正常:
... Predicate pr1 = cb.like(article.get(Article_.code), "%" + searchQuery + "%");
Predicate pr2 = cb.like(article.get(Article_.oem_code), "%" + searchQuery + "%");
Predicate pr3 = cb.conjunction();
for (String str : busquedaSplit) {
Predicate newPredicate = cb.like(article.get(Article_.description), "%" + str + "%");
pr3 = cb.and(pr3, newPredicate);
}
disjunction = cb.or(pr1, pr2, pr3);
predicates.add(disjunction);
以上是 JPA CriteriaBuilder将合并条件合并为析取条件 的全部内容, 来源链接: utcz.com/qa/417884.html