Spring 带';比如';和';或';

Spring 带';比如';和';或';,spring,postgresql,jpa,sql-like,Spring,Postgresql,Jpa,Sql Like,我有以下疑问: @Query("select c from Category c where ( (lower(c.name) like '%' || lower(:searchText) || '%') or (lower(c.description) like '%' || lower(:searchText)) || '%')") 我的产品设计为在多个平台上运行,我在postgreSQL上遇到一个错误,即: PSQLException:错误:或的参数必须是布尔类型,而不是布尔类型 文本

我有以下疑问:

@Query("select c from Category c where ( (lower(c.name) like '%' || lower(:searchText) || '%') or (lower(c.description) like '%' || lower(:searchText)) || '%')")
我的产品设计为在多个平台上运行,我在postgreSQL上遇到一个错误,即:

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


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

您的括号不正确,以下内容应适用:

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

尝试向组操作添加显式括号。我认为您遇到了运算符优先级问题。您的意思是在比较参数?的周围添加括号,如果是,我不起作用。您能告诉我您尝试了什么(在添加参数的地方)并且确切地说它“不起作用”吗?请包括您的PostgreSQL版本和EclipsLink/Hibernate/将HQL转换为的真正底层SQL。您可以通过PostgreSQL日志和
log\u语句='all'
或ORM日志获取该信息。