Spring JPA规范,例如数字字段

时间:2020-06-05 12:07:37

标签: java spring jpa specifications

我有一个名为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与数字字段一起使用。

我有2个问题:

  • 本机查询如何在数字字段上执行此like查询,但JPA查询呢?

  • 如果可以通过JPA进行此操作,请帮助我!

谢谢你

1 个答案:

答案 0 :(得分:2)

不能在数字列上赞。

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

要使用Criteria API进行此操作,必须将数字强制转换为如下所示的字符串:

stdin