Spring Data JPA Regex查询方法报错,文档显示支持该关键词求助
问题描述
我定义了一个使用正则表达式(Regex)和分页功能返回对象的方法:
Page<JokeModel> searchAllByPhraseRegex(String phrase, Pageable pageable);
但运行时抛出异常:Unsupported keyword REGEX (1): [MatchesRegex, Matches, Regex]。
Spring Data JPA 1.3.0.RELEASE文档明确说明支持Regex关键词,且IntelliJ IDEA也提供了该方法的自动补全提示,请问该如何解决此问题?
解决方案
- 检查底层ORM实现版本:Spring Data JPA只是抽象层,实际执行查询的是Hibernate这类ORM框架。早期Hibernate版本(如4.3.11之前)不支持Regex相关的JPQL函数,即便Spring Data文档标注支持也会报错。如果用Hibernate,升级到4.3.11.Final及以上版本。
- 改用@Query手动实现:若无法升级ORM,直接通过注解写查询逻辑:
也可以用原生SQL(注意适配数据库正则语法,比如MySQL用@Query("SELECT j FROM JokeModel j WHERE j.phrase REGEXP :phrase") Page<JokeModel> searchAllByPhraseRegex(@Param("phrase") String phrase, Pageable pageable);REGEXP,PostgreSQL用~):@Query(value = "SELECT * FROM joke_model WHERE phrase REGEXP :phrase", nativeQuery = true) Page<JokeModel> searchAllByPhraseRegex(@Param("phrase") String phrase, Pageable pageable); - 确认Repository配置:确保你的Repository接口正确继承
JpaRepository或PagingAndSortingRepository,避免自定义RepositoryFactoryBean覆盖默认方法解析逻辑。 - 校验正则语法:不同数据库正则语法存在差异,确保传入的
phrase符合当前数据库的规范,避免因语法错误引发异常。
内容的提问来源于stack exchange,提问作者John Roice M. Aldeza
相关产品推荐
相关产品推荐

