【问题标题】:Using Java Predicates in MYSQL AND condition在 MYSQL AND 条件中使用 Java 谓词
【发布时间】:2020-11-25 17:40:05
【问题描述】:

我有以下基于java predicate 的代码,它从我的MYSQL DB 中获取结果列表:

Root<Person> from = query.from(Person.class);
CriteriaQuery<Person> selectQuery = query.select(from);
List<Person> searchResults = new ArrayList<>();

Predicate jobPredicate = createPersonJobPredicate();
Predicate agePredicate = createPersonAgePredicate(); //currently not used

selectQuery = selectQuery.where(jobPredicate);
searchResults =entityManager.createQuery(selectQuery).setFirstResult(searchRequest.getIndex()).setMaxResults(searchRequest.getSize()).getResultList();

我想要做的是更改上面的代码,以便结果列表必须匹配 both 谓词 - 例如必须是job - "doctor" AND age - 45

我尝试过如下组合谓词,但这总是只返回工作谓词:

selectQuery = selectQuery.where(jobPredicate).where(agePredicate);

我该怎么做?

【问题讨论】:

    标签: java mysql arraylist predicate criteriaquery


    【解决方案1】:

    尝试类似:

    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Person> criteriaQuery = criteriaBuilder.createQuery(Person.class);
    Root<Person> personRoot = criteriaQuery.from(Person.class);
    
    Predicate jobPredicate = criteriaBuilder.equal(personRoot.get("job"), "doctor");
    Predicate agePredicate = criteriaBuilder.greaterThan(personRoot.get("age"), 45);
    
    Predicate combinedPredicate = criteriaBuilder.and(jobPredicate, agePredicate);
    criteriaQuery.where(combinedPredicate);
    List<Person> searchResults = 
       entityManager.createQuery(criteriaQuery).getResultList();
    

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 2015-10-18
      • 2018-11-22
      • 1970-01-01
      • 2021-10-22
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      相关资源
      最近更新 更多