我的数据库中存储了以下数据结构:
public class Company{
...
Long companyNumber;
...
}
现在,我要在此特定列上执行Like
搜索。如某些类似的questions中所述,我正在尝试在规范类中的条件构建器上执行.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
,{ {1}}),但是当我搜索一个以上字符的值时,找不到结果。例如:如果我搜索9111
,即使数据库中有公司的公司编号包含91
的公司也找不到任何结果:91
,1191
,{{1} }。我对此感到困惑,您能指出我在哪里弄错了吗?
编辑
添加了1911
的定义,搜索过滤器是通过构造函数设置的:
9111
将搜索参数作为请求参数传递的地方
答案 0 :(得分:0)
结果证明上述代码工作正常,问题在于使用分页进行搜索并且请求的页面数大于最大结果,因此返回的结果列表为空。