我有一个名为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进行此操作,请帮助我!
谢谢你
答案 0 :(得分:2)
不能在数字列上赞。
这适用于某些数据库,因为在执行语句时将数字强制转换为VARCHAR。
要使用Criteria API进行此操作,必须将数字强制转换为如下所示的字符串:
stdin