Использование JPA 2.0 Criteria API для выполнения одинаковых значений Long - PullRequest
0 голосов
/ 17 апреля 2019

В моей базе данных хранится следующая структура данных:

public class Company{
    ...
    Long companyNumber;
    ...
}

Теперь я хочу выполнить Like поиск по данному столбцу. Как указано в некоторых похожих вопросах , я пытаюсь создать .as(String.class) в построителе критериев внутри моего класса спецификаций:

public class CompanySpecification implements Specification<Company> { 

private String searchFilter;

@Override
public Predicate toPredicate(Root<Company> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
    ...
    orPredicates.add(criteriaBuilder.like(root.get(Company_.companyNumber).as(String.class), "%" + searchFilter + "%"));
    ...
}

Однако следующая реализация работает только с первым символом. Например:

Если выполняется поиск строкового значения 9, этот предикат возвращает все компании, в которых 9 является частью companyNumber (1119, 1191, 1911, 9111), но при поиске значений с более одного символа, никаких результатов не найдено. Например: если я ищу 91, результаты не будут найдены, хотя в базе данных есть компании с номерами компаний, содержащими 91: 1191, 1911, 9111. Я застрял на этом, не могли бы вы указать, где я допустил ошибку?

EDIT

добавлено определение searchFilter, поисковый фильтр установлен через конструктор:

CompanySpecification companySpecification = new CompanySpecification(searchParameter);

где параметр поиска передается как параметр запроса

1 Ответ

0 голосов
/ 17 апреля 2019

Оказалось, что приведенный выше код работает нормально, проблема заключалась в том, что поиск был выполнен с разбивкой на страницы, и количество запрошенных страниц было больше, чем максимальные результаты, поэтому список возвращаемых результатов был пуст.

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