Проблемы при переходе на JPA 2 при преобразовании из Criteria в CriteriaQuery
Я пытаюсь реализовать JPA 2
в моем приложении, и я не могу переключиться с Criteria
в CriteriaQuery
для приведенного ниже кода. Вот код, который использует Criteria API
из старой версии:
public List<Person> findByName(List<String> names) {
Criteria criteria = getCriteria(Person.class);
criteria.add(Restrictions.isNull(person.get("course"));
Disjunction predicate = Restrictions.disjunction();
criteria.add(predicate);
for (String personName : names) {
predicate.add(Restrictions.eq("John", personName).ignoreCase());
}
return (List<Person>)criteria.list();
}
Я хочу изменить вышеуказанный код для использования CriteriaQuery
от JPA2
, Вот что я попробовал:
CriteriaBuilder criteriaBuilder = getCriteriaBuilder();
CriteriaQuery<Person> criteriaQuery = getCriteriaQuery(criteriaBuilder, Person.class);
Root<Person> person= getSelectRoot(criteriaQuery, Person.class);
Predicate disjunct = criteriaBuilder.disjunction();
List<Predicate> predicateList = new ArrayList<>();
Predicate nullCheck = criteriaBuilder.isNull(person.get("course"));
for (String personName : names) {
predicateList.add(criteriaBuilder.or(disjunct,
criteriaBuilder.equal(person.get("name"), personName)));
}
criteriaQuery.where(criteriaBuilder.and(predicateList.toArray(new Predicate[predicateList.size()])));
return getList(getTypedQuery(criteriaQuery));
Результаты двух кодов разные, что приводит к сбою тестов. Буду признателен, если кто-нибудь подскажет, где я делаю не так. Спасибо.