ktc*_*tcl 1 java spring specifications jpa
我有一个名为Citizen:
public class Citizen {
private Long id;
private String name;
private Long code;
//get,set
}
Run Code Online (Sandbox Code Playgroud)
我用于使用过滤器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
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用API时,它抛出异常:参数与java.lang.Long类型不匹配
like我知道这个错误,因为我尝试与数字字段一起使用。
我有两个问题:
本机查询如何like在数字字段上执行此查询,但在 JPA 查询上执行此查询?
如果有办法可以用 JPA 做到这一点,请帮助我!
提前谢谢您
无法对数字列进行 LIKE。
这适用于某些数据库,因为执行语句时会将数字转换为 VARCHAR。
要使用 Criteria API 执行此操作,您必须将数字转换为字符串,如下所示:
restrictions.add(builder.like(root.get("name").as(String.class), "%"+filter.getCode ()+"%"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4657 次 |
| 最近记录: |