Java Spring不支持StringMatcher正则表达式
尝试将StringMatcher.REGEX与java spring一起使用时出现问题。没有编译器错误或任何错误,但是当您尝试使用上述字符串匹配器调用该项时,您会收到以下错误:Java Spring不支持StringMatcher正则表达式,java,spring,spring-data-jpa,spring-data,query-by-example,Java,Spring,Spring Data Jpa,Spring Data,Query By Example,尝试将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
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中工作,而不是在javaspring中。示例查询的spring文档说明:
然而,情况并非如此。根据for Spring的说法,不支持StringMatcher.REGEX,而且永远不会支持,因为并非所有数据库系统都支持它。基本上,您只能访问默认项、精确项、起始项、结束项和包含字符串匹配项的项,而正则表达式将永远无法工作。我希望这个答案能节省很多时间。我花了太多时间想弄明白