在Spring中无法正常使用like

问题描述

我在数据库中有一个名称为Plan的计划 “新计划”,但是每次我使用参数“新”查询时,都不会得到结果。 (由于我正在使用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));
}

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

解决方法

criteriaBuilder.like()确实为您放置了%,因此您正在做的事情是寻找一个名为New(实际上就是这种情况)的计划,您应该添加{{ 1}}在您要查找的字符串上,类似这样:

%

带有criteriaBuilder的赞示例:https://api.mapbox.com/downloads/v2/mobile-maps/releases/ios/packages/6.1.0/mapbox-ios-sdk-dynamic.zip