【问题标题】: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 的日志中获取。

标签: spring postgresql jpa sql-like


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多