java - JPA CriteriaBuilder 连接条件转换为分离条件

标签 java hibernate jpa criteria

我需要将此查询复制到 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 作为参数。

谢谢

最佳答案

这就是我所做的并且看起来工作正常:

...  
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);

关于java - JPA CriteriaBuilder 连接条件转换为分离条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38400272/

相关文章:

spring - JSP属性文件读取

java - 在下面的java代码中获取StackOverflowError

java - 具体类的多个实例与抽象类的多个实现

java - 为什么 Java 编译器(特别是它的解析器)不能理解这个语句

java - 如何配置 Spring Boot JPA Java 实体以自动修剪每个 CHAR 列中的字符串?

java - JPA 将 Java Double 映射到 SQL Number 列

java - JPA EntityManager限制数据库上的并发操作数

java - 我当前的代码显示,最后输入分数的学生是最高的,即使该分数低于录取分数

java - 如何防止 null 在 TextView 中显示?

hibernate - 如何将 Hibernate Envers 审计表存储到不同的模式中?