Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring不支持StringMatcher正则表达式_Java_Spring_Spring Data Jpa_Spring Data_Query By Example - Fatal编程技术网

Java Spring不支持StringMatcher正则表达式

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

尝试将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中工作,而不是在javaspring中。示例查询的spring文档说明:

然而,情况并非如此。根据for Spring的说法,不支持StringMatcher.REGEX,而且永远不会支持,因为并非所有数据库系统都支持它。基本上,您只能访问默认项、精确项、起始项、结束项和包含字符串匹配项的项,而正则表达式将永远无法工作。我希望这个答案能节省很多时间。我花了太多时间想弄明白