带有'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