Spring JPA 规范,如数字字段

Spring JPA specification like number field

我有一个 table 名为 Citizen:

public class Citizen {
    private Long id;
    private String name;
    private Long code;

    //get,set
}

我使用 Specification 搜索 Citizen 过滤器:

public class CitizenFilter(){
    private String name;
    private Long code;

    // get, set
}

public class CitizenSpecification implements Specification<Citizen>{
    private CitizenFilter filter;
    // get, set

    @Override
    public Predicate toPredicate(Root<Citizen> root, CriteriaQuery<?> query, CriteriaBuilder builder)                
    {
        List<Predicate> restrictions = new ArrayList<>();
        if(filter.getName != null){
            restrictions.add(builder.like(root.get("name"), "%"+filter.getName()+"%"));
        }
        if(filter.getCode != null){
            restrictions.add(builder.like(root.get("code"), "%"+filter.getCode ()+"%"));
        }
        // disjunction().....
        // return expression
    }
}

当我调用 API 时,它抛出异常:参数与类型 java.lang.Long

不匹配

我知道这个错误是因为我尝试将 like 与数字字段一起使用。

我有两个问题:

先谢谢你

无法对数字列进行 LIKE。

这适用于某些数据库,因为在执行语句时会将数字转换为 VARCHAR。

要使用 Criteria API 执行此操作,您必须将数字转换为这样的字符串:

restrictions.add(builder.like(root.get("name").as(String.class), "%"+filter.getCode ()+"%"));