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]的正确版本时才将其用作最后的选择
@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)
在后续工作中,我通过一些挖掘发现权威列表将驻留在 org.springframework.data.jpa.repository.query.JpaQueryCreator 类中。因此,对于想知道“已记录”列表中的哪些关键字实际实现的未来人,请查看 JpaQueryCreator 内部,您将在 switch 中支持作为 case 参数的关键字!
希望这可以帮助!
PS - 怀疑,我的版本不支持 REGEX
| 归档时间: |
|
| 查看次数: |
5103 次 |
| 最近记录: |