java - Java Spring 不支持的 StringMatcher 正则表达式
问题描述
尝试将 StringMatcher.REGEX 与 java spring 一起使用时出现问题。没有编译器错误或任何东西,但是当您尝试使用上述字符串匹配器调用该项目时,您会收到以下错误:
2020-10-09 15:07:30.543 ERROR 29584 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Unsupported StringMatcher REGEX; nested exception is java.lang.IllegalArgumentException: Unsupported StringMatcher REGEX] with root cause
java.lang.IllegalArgumentException: Unsupported StringMatcher REGEX
at org.springframework.data.jpa.convert.QueryByExamplePredicateBuilder.getPredicates(QueryByExamplePredicateBuilder.java:210) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.jpa.convert.QueryByExamplePredicateBuilder.getPredicate(QueryByExamplePredicateBuilder.java:102) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository$ExampleSpecification.toPredicate(SimpleJpaRepository.java:886) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
at org.springframework.data.jpa.repository.support.SimpleJpaRepository.applySpecificationToCriteria(SimpleJpaRepository.java:762) ~[spring-data-jpa-2.3.4.RELEASE.jar:2.3.4.RELEASE]
执行以下内容时可以看到该错误:
ExampleMatcher matcher = ExampleMatcher
.matchingAll()
.withStringMatcher(
ExampleMatcher.StringMatcher.REGEX
);
请注意,上面的代码编译得很好,执行时会发生错误。
解决方案
首先,StringMatcher.REGEX 是一个完全有效的值。正如您在 ExampleMatcher.class 文件中看到的,您有 6 个有效的 StringMatcher 选项:
public static enum StringMatcher {
DEFAULT,
EXACT,
STARTING,
ENDING,
CONTAINING,
REGEX;
private StringMatcher() {
}
}
因为它是一个有效的条目,所以代码将编译得很好并且看不到任何问题。问题是 regex 选项仅适用于 Java,而不适用于 Java Spring。示例查询的弹簧文档指出:
然而,这种情况并非如此。根据 Spring 的jira 票证,不支持 StringMatcher.REGEX 并且永远不会支持,因为并非所有数据库系统都支持它。基本上,您只能访问 DEFAULT、EXACT、STARTING、ENDING 和 CONTAINING 字符串匹配项,而 REGEX 将永远无法工作。我希望这个答案可以节省很多时间。我浪费了太多试图弄清楚。
推荐阅读
- angular - How to handle multiple date format in Bsdatepicker
- groovy - 具有重复键的嵌套 JSON
- heroku - Heroku | Change app to a worker app rather than web
- angular - “Promise”类型上不存在属性“管道”
' - java - process.waitFor(timeout, timeUnit) 在指定时间后不退出进程
- javascript - Jest 使用 sqlite 返回表未找到错误
- node.js - nodejs docker环境中的create-react-app错误
- angular - 重新创建 Angular 服务并丢失数据
- outlook - Outlook 邮件 REST API 参考(2.0 版)
- python - Python中的多处理,变量赋值