简体   繁体   English

在 MYSQL AND 条件中使用 Java 谓词

[英]Using Java Predicates in MYSQL AND condition

I have the following java predicate based code that gets a result list from my MYSQL DB:我有以下基于java predicate的代码,它从我的MYSQL数据库中获取结果列表:

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

What I want to do is change the above code so that the result list has to match both predicates - eg must be job - "doctor" AND age - 45我想要做的是更改上面的代码,以便结果列表必须匹配两个谓词 - 例如必须是job - "doctor" AND age - 45

I have tried combining the predicates as such below, but this always only returns the job predicate:我尝试将谓词组合如下,但这总是只返回工作谓词:

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

How can I do so?我该怎么做?

Try something like:尝试类似:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM