使用JPA 2.0 Criteria API可以对Long value执行类似的操作

时间:2019-04-17 10:39:14

标签: java spring jpa spring-data-jpa

我的数据库中存储了以下数据结构:

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(111911911911,{ {1}}),但是当我搜索一个以上字符的值时,找不到结果。例如:如果我搜索9111,即使数据库中有公司的公司编号包含91的公司也找不到任何结果:911191,{{1} }。我对此感到困惑,您能指出我在哪里弄错了吗?

编辑

添加了1911的定义,搜索过滤器是通过构造函数设置的:

9111

将搜索参数作为请求参数传递的地方

1 个答案:

答案 0 :(得分:0)

结果证明上述代码工作正常,问题在于使用分页进行搜索并且请求的页面数大于最大结果,因此返回的结果列表为空。