簡體   English   中英

如何在 Spring Data Repository 方法中使用 Regex 關鍵字

[英]How to use Regex keyword in Spring Data Repository Method

我目前使用的是spring-data-jpa版本1.9.4

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

我有一個正則表達式,我想用它來搜索摘要和/或描述字段,這意味着如果它在摘要中找到它,則不需要將正則表達式應用於描述。

我嘗試使用的存儲庫方法是:

List<Issue> findByProjectAndSummaryOrDescriptionRegex(long project, String regex)

我收到的錯誤是:

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

在我的公司環境中更新/升級版本很困難,所以如果問題不是我的語法,而是如果有人知道哪個版本現在支持“Regex”進行查詢派生或者我在哪里可以找到特定信息,我將不勝感激. 我查看了更新Changelog ,似乎1.9.4應該支持但似乎不支持。

感謝您的幫助!

京東

編輯 1:我知道@Query注釋,但我的領導要求僅在我找不到支持關鍵字 REGEX [MatchesRegex, Matches, Regex] 的正確版本時才使用它作為最后的手段

如果 Spring 數據語法不起作用,我建議使用本機查詢(帶有@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);

更新

如果本機查詢不是一個選項,那么 (a) 你可以用單列嘗試它,看看它是否有效,(b) 你可以通過將regex附加到兩列來嘗試,例如:

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

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

在后續工作中,我通過一些挖掘發現權威列表將駐留在 org.springframework.data.jpa.repository.query.JpaQueryCreator 類中。 因此,對於想知道“已記錄”列表中的哪些關鍵字實際實現的未來人,請查看 JpaQueryCreator 內部,您將在 switch 中支持作為 case 參數的關鍵字!

希望這有幫助!

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

試試你在里面使用@Query with param nativeQuery = true你可以使用數據庫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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM