NullPointerException при использовании EntityManager и Критерии в Java - PullRequest
0 голосов
/ 17 декабря 2018

Я создал класс, который выполняет запрос на основе некоторых фильтров, которые заполняются в приложении внешнего интерфейса.В основном есть 3 фильтра: «Заголовок», «startDate» и «endDate».Вот проблемы, с которыми я сталкиваюсь:

Когда я отправляю заголовок без дат, система работает нормально;Когда я отправляю заголовок с датами, система работает нормально, возвращая список объектов правильно;Когда я отправляю даты без заголовка, система выдает исключение NullPointerException.

public class RacRepositoryImpl implements RacRepositoryQuery  {

@PersistenceContext
private EntityManager entityManager;

@Override
public List<Rac> filtrar(RacFilter racFilter) throws Exception {
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Rac> query = builder.createQuery(Rac.class);
    Root<Rac> from = query.from(Rac.class);

    Predicate predicate = builder.and();

    //title
    if (racFilter.getTitulo() != null & racFilter.getTitulo().length() > 2) {
                predicate = builder.and(predicate, 
                builder.like(from.<String>get("titulo"), "%"+racFilter.getTitulo()+"%"));
    }

    //startDate
    if (racFilter.getDataInicial() != null) {
        predicate = builder.and(predicate,
                builder.greaterThanOrEqualTo(from.<Date>get("dataHora"), racFilter.getDataInicial()));
    }

    //finalDate
    if (racFilter.getDataFinal() != null) {
        predicate = builder.and(predicate,
                builder.lessThanOrEqualTo(from.<Date>get("dataHora"), racFilter.getDataFinal()));
    }

    // here it throws the NullPointer exception when I don't send the title information 
    TypedQuery<Rac> typedQuery = entityManager.createQuery(
        query.select(from )
        .where( predicate )
    );

    try {

        List<Rac> results = typedQuery.getResultList();
        return results;

    } catch (Exception e) {
        throw new Exception("not found");
    }


}

Я не публикую другие классы, потому что я отлажен, и атрибуты хорошо подходят этому классу.Проблема в том, что когда я не отправляю поле «заголовок», это означает, что когда оно пустое (это не обязательно), запрос не работает

1 Ответ

0 голосов
/ 17 декабря 2018

Скорее всего, источник NullPointerException находится здесь:

//title
if (racFilter.getTitulo() != null & racFilter.getTitulo().length() > 2) {

Пожалуйста, замените "&" на "&&" и посмотрите результат.

...