Использование предикатов Java в MYSQL И condition

#java #mysql #arraylist #predicate #criteriaquery

#java #mysql #arraylist #предикат #criteriaquery

Вопрос:

У меня есть следующий 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();
 

Что я хочу сделать, так это изменить приведенный выше код, чтобы список результатов должен соответствовать обоим предикатам — например, должен быть job - "doctor" AND age - 45

Я попытался объединить предикаты как таковые ниже, но это всегда возвращает только предикат задания:

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

Как я могу это сделать?

Ответ №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();