Spring Data Repository方法中如何使用Regex关键字

Jav*_*aJd 2 java mysql spring jpql spring-data-jpa

我目前正在使用spring-data-jpaversion 1.9.4

我有一个MySql表,其中包含列project(integer),summary(varchar)和description(varchar)。

我有一个正则表达式,我想用它来搜索摘要和/或描述字段,这意味着如果它在摘要中找到它,则无需将正则表达式应用于描述。

我尝试使用的存储库方法是:

List<Issue> findByProjectAndSummaryOrDescriptionRegex(long project, String regex)
Run Code Online (Sandbox Code Playgroud)

我收到的错误是:

java.lang.IllegalArgumentException:不支持的关键字REGEX(1):[MatchesRegex,Matches,Regex]

在我的公司环境中,很难更新/升级版本,因此如果问题不是我的语法,而是如果有人知道现在哪个版本支持“ Regex”进行查询派生,或者在哪里可以找到特定信息,我将不胜感激。 。我看过了Changelog,似乎1.9.4应该支持,但似乎没有。

谢谢你的帮助!

京东

编辑1:我知道@Query注释,但是我的领导要求我仅在无法找到支持关键字REGEX [MatchesRegex,Matches,Regex]的正确版本时才将其用作最后的选择

Dar*_*hta 6

@Query如果Spring数据语法不起作用,我建议使用本机查询(带有注释),例如:

@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);
Run Code Online (Sandbox Code Playgroud)

更新资料

如果不能使用本机查询,则(a)您是否可以在单列中尝试使用它,然后查看是否可行,(b)您可以通过regex在两列之后附加来进行尝试,例如:

List<Issue> findByProjectAndDescriptionRegex(long project, String regex);

List<Issue> findByProjectAndSummaryRegexOrDescriptionRegex(long project, String regex, String regex);
Run Code Online (Sandbox Code Playgroud)


Jav*_*aJd 5

在后续工作中,我通过一些挖掘发现权威列表将驻留在 org.springframework.data.jpa.repository.query.JpaQueryCreator 类中。因此,对于想知道“已记录”列表中的哪些关键字实际实现的未来人,请查看 JpaQueryCreator 内部,您将在 switch 中支持作为 case 参数的关键字!

希望这可以帮助!

PS - 怀疑,我的版本不支持 REGEX