JPA CriteriaBuilder将合并条件合并为析取条件 [英] JPA CriteriaBuilder conjunction criteria into a disjunction criteria
本文介绍了JPA CriteriaBuilder将合并条件合并为析取条件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要将此查询复制到 JPA CriteriaBuilder 代码中:
I need to replicate this query into JPA CriteriaBuilder code:
....
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
作为参数.
Now, how can I add this andPredicate
to my disjunction predicate? The getExpressions().add(...)
does not take a Predicate
as param.
谢谢
推荐答案
所以这就是我所做的,并且似乎运行良好:
So here it's what I did and seems that is working fine:
...
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将合并条件合并为析取条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文