исключение при использовании метода not () в классе Criteria из проекта spring-data -asticsearch - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь использовать spring-data -asticsearch в моем проекте.Когда я хочу запросить некоторые данные, я использую queryForList(CriteriaQuery query, Class<T> clazz) в ElasticsearchTemplate.

Но я продолжал получать NullPointerException снизу код:

List<QueryBuilder> negationFilters = buildNegationFilter(criteria.getField().getName(), criteria.getFilterCriteriaEntries().iterator());

Это исключение происходило только когда яхочу использовать not() вместе с and().Когда я использую только not(), это работает.

Вот мой код:

CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
        .and(new Criteria("symbol").is("1111"))
        .and(new Criteria("code").is("22").not()));


List<xx> sampleEntities = elasticsearchTemplate.queryForList(criteriaQuery,xx.class);

И я подозреваю, что, возможно, в исходном коде есть ошибки:

В CriteriaFilterProcessor class,

ListIterator<Criteria> chainIterator = criteria.getCriteriaChain().listIterator();

while (chainIterator.hasNext()) {
    QueryBuilder fb = null;
    Criteria chainedCriteria = chainIterator.next();
    if (chainedCriteria.isOr()) {
        fb = QueryBuilders.boolQuery();
        for(QueryBuilder f: createFilterFragmentForCriteria(chainedCriteria)){
            ((BoolQueryBuilder)fb).should(f);
        }
        fbList.add(fb);
    } else if (chainedCriteria.isNegating()) {
        List<QueryBuilder> negationFilters = buildNegationFilter(criteria.getField().getName(), criteria.getFilterCriteriaEntries().iterator());
        if (!negationFilters.isEmpty()) {
            fbList.addAll(negationFilters);
        }
    } else {
        fbList.addAll(createFilterFragmentForCriteria(chainedCriteria));
    }
}

В части else if (chainedCriteria.isNegating()) зачем использовать criteria для получения поля?Я отладил его и обнаружил, что поле criteria будет null, но chainedCriteria нет. Так это ошибка исходного кода или неправильный способ использования?

1 Ответ

0 голосов
/ 15 мая 2019

Я решил с

CriteriaQuery criteriaQuery = new CriteriaQuery(new Criteria()
        .and(new Criteria("symbol").is("1111"))
        .and("code").is("22").not());

такой проводной, все еще хочу знать, почему данный код не может работать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...