在规范中使用 like 在 Spring 中不起作用

Usage of like in Specification is not working in Spring

我的数据库中有一个带有名称的计划 “新计划”,但每次我使用参数“新”查询时,它都不会给我结果。 (它应该 return 因为我正在使用 like

我构建规范的方式有问题吗? 谢谢

规格:

public Specification<Plan> hasOptionalName(String name) {
        return (root, query, criteriaBuilder) -> name == null ?
                criteriaBuilder.conjunction() :
                criteriaBuilder.like(root.get("name"), name);
    }
public Specification<Plan> buildSpecification(Long id, String name, PlanStatus status) {
    return planSpecification.withId(id)
            .and(planSpecification.withStatus(status))
            .and(planSpecification.hasOptionalName(name));
}

但结果不会 return“新计划”,但当我删除过滤器时,它将 returned。

criteriaBuilder.like() doenst put the % for you, so wath you are doing there is looking for a plan that is call New(正是这种情况)你应该添加% 在您要查找的字符串上,类似于:

criteriaBuilder.like(root.get("name"), "%" + name + "%")

criteriaBuilder 点赞示例:https://www.objectdb.com/java/jpa/query/jpql/string