Проблемы при переходе на 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));

Результаты двух кодов разные, что приводит к сбою тестов. Буду признателен, если кто-нибудь подскажет, где я делаю не так. Спасибо.

0 ответов

Другие вопросы по тегам