1
Ich brauche diese Abfrage in JPA CriteriaBuilder Code zu replizieren:JPA CriteriaBuilder Verbindung Kriterien in eine Disjunktion Kriterien
....
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%'
)
)
und hier ist mein Code:
...
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 + "%"));
}
Nun, wie kann ich diese hinzufügen andPredicate
zu meinem Disjunktion Prädikat? getExpressions().add(...)
benötigt keinen Predicate
als param.
Dank
Mann, du hast mir sehr geholfen ... mit diesem Ansatz können wir Operatoren AND und OR mischen. .. wie hast du die return statement geschrieben? thanx – Hinotori
@Hinotori Ich habe es in einem Array wie diesem 'Prädikaten.toArray (neues Prädikat [Prädikat.Grund()]) konvertiert und das ist, was Sie in Ihre 'cq.where (' ... ') setzen müssen ; ' –