在规范中使用 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
我的数据库中有一个带有名称的计划
“新计划”,但每次我使用参数“新”查询时,它都不会给我结果。 (它应该 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