В моей базе данных хранится следующая структура данных:
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);
где параметр поиска передается как параметр запроса