我有一个名为 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
查询数字字段,但JPA查询?
如果有一个方法,我可以做到这一点与JPA,请帮助我 !
先谢谢你
在数字列上使用LIKE是不可能的。
这在一些数据库中是可行的,因为当你执行语句时,数据库会将数字转换为一个VARCHAR。
在Criteria API中,你必须将数字转换为一个字符串,就像这样。
restrictions.add(builder.like(root.get("name").as(String.class), "%"+filter.getCode ()+"%"));