Java 在规范中使用like在春季不起作用

Java 在规范中使用like在春季不起作用,java,sql,spring,specifications,Java,Sql,Spring,Specifications,我的数据库中有一个名为 “New Plan”,但每次我使用参数“New”进行查询时,它都不会给出结果。(它应该返回,因为我正在使用类似于的) 我如何构建我的规范有什么问题吗? 多谢各位 规格: public Specification<Plan> hasOptionalName(String name) { return (root, query, criteriaBuilder) -> name == null ? criter

我的数据库中有一个名为 “New Plan”,但每次我使用参数“New”进行查询时,它都不会给出结果。(它应该返回,因为我正在使用类似于的

我如何构建我的规范有什么问题吗? 多谢各位

规格:

public Specification<Plan> hasOptionalName(String name) {
        return (root, query, criteriaBuilder) -> name == null ?
                criteriaBuilder.conjunction() :
                criteriaBuilder.like(root.get("name"), name);
    }
公共规范hasOptionalName(字符串名称){
return(root、query、criteriaBuilder)->name==null?
criteriaBuilder.conjunction():
criteriaBuilder.like(root.get(“name”)、name);
}
公共规范构建规范(长id、字符串名称、PlanStatus状态){
返回平面规格。带id(id)
.和(带状态的平面规格(状态))
.和(planSpecification.hasOptionalName(名称));
}
但是结果不会返回“New Plan”,但是当我删除过滤器时,它会返回。

criteriaBuilder.like()
不会为您放置
%
,因此您在那里做的是寻找一个名为
New
的计划(就是这种情况),您应该在您要查找的字符串上添加
%
,诸如此类:

criteriaBuilder.like(root.get(“name”),“%”+name+“%”


与criteriaBuilder类似的示例:

您确定您提供的
id
status
是否与
name
等于新计划匹配?@m.antkowicz是的,先生。因为当我删除名称过滤器时,将返回
新计划
(仍然带有id和状态过滤器)。谢谢您,先生!:D我以为不再需要了。再次感谢您!
public Specification<Plan> buildSpecification(Long id, String name, PlanStatus status) {
    return planSpecification.withId(id)
            .and(planSpecification.withStatus(status))
            .and(planSpecification.hasOptionalName(name));
}