gpt4 book ai didi

java - Spring Data JPA - 带模式匹配的不区分大小写的查询

转载 作者:行者123 更新时间:2023-12-01 07:21:04 26 4
gpt4 key购买 nike

假设我正在为一个简单的 CMS 包实现搜索功能(只是一个示例),并且想要通过 title 来匹配帖子和content 。据推测,我会有某种 Post具有以下基础表结构的实体:

+------------------------------------+
| POST |
+---------+--------------+-----------+
| post_id | INTEGER | NOT NULL, |
| title | VARCHAR(255) | NOT NULL, |
| content | CLOB | NOT NULL |
+---------+--------------+-----------+

接下来,我将扩展 Spring 的 JpaRepository并通过 @Query 添加搜索方法注释,就像这样(同样,只是一个例子):

public interface PostRepository extends JpaRepository<Post, Integer> {

@Query("SELECT p FROM Post AS p WHERE lower(p.title) LIKE lower(%:searchTerm%)"
+ " OR lower(p.content) LIKE lower(%:searchTerm%) ORDER BY p.title")
List<Post> findBySearchTerm(@Param("searchTerm") String searchTerm);
}

问题是 Spring(或者可能只是底层 JPA 提供程序,不确定)由于 lower(%:searchTerm%) 很难解析此查询。 WHERE 中的表达式条款。我还尝试了此语法的其他变体,例如 %lower(:searchTerm)% ,但到目前为止似乎都不起作用。有人对此有好的(最好是干净的)解决方案吗?

P.S.:我更喜欢使用 @Query为了保持一致性而进行注释。不过,我想其他解决方案(例如 Spring 的 method name -> query 派生或 Criteria API )也是受欢迎的。

最佳答案

1) 将已经小写的 searchTerm 注入(inject)到方法中,并使用 JPQL ..... lower(COLUMN_NAME) like %:searchTerm%

2) 使用具有以下命名语法的方法名称,因此您不需要向 JPQL ..... lower(COLUMN_NAME ) :searchTerm

findBySearchTermContainingIgnoreCase(String searchTerm)
findBySearchTermStartingWithIgnoreCase(String searchTerm)

关于java - Spring Data JPA - 带模式匹配的不区分大小写的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37759084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com