我目前正在使用spring-data-jpa
版本1.9.4
。
我有一个包含项目(整数),摘要(varchar)和描述(varchar)的MySql表。
我有一个正则表达式,我想用它来搜索摘要和/或描述字段,这意味着如果它在摘要中找到它,则不需要将regex应用于描述。
我试图使用的存储库方法是:
List<Issue> findByProjectAndSummaryOrDescriptionRegex(long project, String regex)
我收到的错误是:
java.lang.IllegalArgumentException:不支持的关键字REGEX(1): [MatchesRegex,Matches,Regex]
在我的公司环境中更新/升级版本很困难,所以如果问题不是我的语法,而是如果有人知道现在支持哪个版本&#39; Regex&#39;对于查询派生或我可以找到特定信息的地方,我将不胜感激。我查看了Changelog
,看来1.9.4
应该支持,但似乎不支持。
感谢您的帮助!
JD
编辑1:我知道@Query
注释但我的导致只是在我找不到支持关键字REGEX [MatchesRegex,Matches,Regex]的正确版本时才使用它作为最后的手段
答案 0 :(得分:5)
如果Spring数据语法不起作用,我建议使用本机查询(带Foreground
注释),例如:
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<强>更新强>
如果本机查询不是一个选项,那么(a)你可以尝试单列,看看是否有效,(b)你可以尝试将@Query
附加到两列,例如:
@Query(nativeQuery=true, value="SELECT * FROM table WHERE project = ?1 AND (summary regexp ?2 OR description regexp ?2)")
List<Issue> findByProjectAndSummaryOrDescription(long project, String regex);
答案 1 :(得分:2)
在后续文章中,我通过一些挖掘发现,authoratative列表将驻留在org.springframework.data.jpa.repository.query.JpaQueryCreator类中。因此,对于想要了解“已记录”列表中哪些关键字实际实现的未来人员,请查看JpaQueryCreator内部,并且您将支持关键字作为切换内的案例参数!
希望这有帮助!
PS - 怀疑,我的版本
不支持REGEX答案 2 :(得分:0)
try tu use @Query with param nativeQuery = true inside 你可以使用数据库regexp_like函数:
@Query(value = "select t.* from TABLE_NAME t where regexp_like(t.column, ?1)", nativeQuery = true)