在 JPA 中使用正则表达式搜索
search using regex in JPA
我正在尝试通过多个单词执行简单的搜索功能,例如 SQL 查询
SELECT * FROM faqs WHERE title REGEXP 'préférée|Changer|endommagé' or question REGEXP 'préférée|Changer|endommagé'
但是当我试图在我的 JpaRepository 中 @Query
中实现这个时
@Query(value = "SELECT f FROM Faq f WHERE f.title REGEXP :term" )
Page<Faq> searchByRegExp(@Param("term") String term,Pageable pageable);
但似乎不支持 REGEXP
因为这个错误:
<expression>, <operator>, GROUP, HAVING or ORDER expected, got 'REGEXP'
注意:我尝试添加 nativeQuery = true
- 同样的问题:
@Query(value = "SELECT * FROM faqs WHERE title REGEXP :term ", nativeQuery = true)
Page<Faq> searchByRegExp(@Param("term") String term,Pageable pageable);
很遗憾,jpql 不支持正则表达式。您将不得不使用 like
并写下所有可能性。但在你的情况下,你可以简单地使用 in
:
@Query(value = "SELECT f FROM Faq f WHERE f.title in (:terms)" )
Page<Faq> searchByRegExp(@Param("terms") List<String> terms, Pageable pageable);
并且作为第一个参数传递可能性:List.of("préférée", "Changer", "endommagé")
。对于更复杂的正则表达式,此列表会显着增加,但在这种情况下,只有 3 个值是可能的。
另一种方法是使用 nativeQuery
和 sql:
@Query(value = "SELECT f.* FROM faqs f WHERE (f.title REGEXP :term)", nativeQuery = true)
Page<Faq> searchByRegExp(@Param("term") String term,Pageable pageable);
我正在尝试通过多个单词执行简单的搜索功能,例如 SQL 查询
SELECT * FROM faqs WHERE title REGEXP 'préférée|Changer|endommagé' or question REGEXP 'préférée|Changer|endommagé'
但是当我试图在我的 JpaRepository 中 @Query
中实现这个时
@Query(value = "SELECT f FROM Faq f WHERE f.title REGEXP :term" )
Page<Faq> searchByRegExp(@Param("term") String term,Pageable pageable);
但似乎不支持 REGEXP
因为这个错误:
<expression>, <operator>, GROUP, HAVING or ORDER expected, got 'REGEXP'
注意:我尝试添加 nativeQuery = true
- 同样的问题:
@Query(value = "SELECT * FROM faqs WHERE title REGEXP :term ", nativeQuery = true)
Page<Faq> searchByRegExp(@Param("term") String term,Pageable pageable);
很遗憾,jpql 不支持正则表达式。您将不得不使用 like
并写下所有可能性。但在你的情况下,你可以简单地使用 in
:
@Query(value = "SELECT f FROM Faq f WHERE f.title in (:terms)" )
Page<Faq> searchByRegExp(@Param("terms") List<String> terms, Pageable pageable);
并且作为第一个参数传递可能性:List.of("préférée", "Changer", "endommagé")
。对于更复杂的正则表达式,此列表会显着增加,但在这种情况下,只有 3 个值是可能的。
另一种方法是使用 nativeQuery
和 sql:
@Query(value = "SELECT f.* FROM faqs f WHERE (f.title REGEXP :term)", nativeQuery = true)
Page<Faq> searchByRegExp(@Param("term") String term,Pageable pageable);