如何在Spring Data Repository方法

时间:2017-06-24 15:44:05

标签: java mysql spring spring-data-jpa jpql

我目前正在使用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]的正确版本时才使用它作为最后的手段

3 个答案:

答案 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)

文档: https://www.techonthenet.com/oracle/regexp_like.php