带有'like'和'or'的Spring JPA @Query where子句

Posted

技术标签:

【中文标题】带有\'like\'和\'or\'的Spring JPA @Query where子句【英文标题】:Spring JPA @Query where clause with 'like' and 'or'带有'like'和'or'的Spring JPA @Query where子句 【发布时间】:2013-05-20 08:10:15 【问题描述】:

我有以下查询:

@Query("select c from Category c where ( (lower(c.name) like '%' || lower(:searchText) || '%') or (lower(c.description) like '%' || lower(:searchText)) || '%')")

我的产品设计为在多个平台上运行,我在 postgreSQL 上遇到错误:

PSQLException:错误:OR 的参数必须是布尔类型,而不是类型 文本。

这是不可理解的,因为 like 子句返回字符串。但我无法在一个查询请求中执行搜索。所以问题是如何在 where 条件引用 2 个不同列并使用“like”运算符的情况下执行搜索。

【问题讨论】:

尝试为组操作添加显式括号。我认为您遇到了运算符优先级问题。 你的意思是在比较参数周围添加括号?如果是这样,我没有工作 你能告诉我你尝试了什么(你在哪里添加了括号)以及它“没有用”吗?请包括您的 PostgreSQL 版本和 EclipesLink/Hibernate/whatever 将 HQL 转换为的真正底层 SQL。您可以使用 log_statement = 'all' 从 PostgreSQL 日志或您的 ORM 的日志中获取。 【参考方案1】:

您的括号不正确,以下应该可以工作:

@Query("select c from Category c " +
       "where (lower(c.name) like ('%' || lower(:searchText) || '%')) " +
         " or (lower(c.description) like ('%' || lower(:searchText) || '%'))")

【讨论】:

以上是关于带有'like'和'or'的Spring JPA @Query where子句的主要内容,如果未能解决你的问题,请参考以下文章

Spring Data JPA Repository Method Query 用like?

模糊查询:Spring Data JPA 如何进行模糊查询(LIKE) ?

Spring data jpa - 如何通过方法名称组合多个And和Or

带有计数和 tfidf 矢量化器的管道产生 TypeError: expected string or bytes-like object

带有 Hibernate 和 Ehcache 的 Spring 数据 JPA 不起作用

带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用