2013-05-20 25 views
1

我有以下查詢:春天JPA @Query存儲與「象」和條款「或」

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

我的產品設計爲在多個平臺上運行,我得到PostgreSQL的一個錯誤是:

PSQLException: ERROR: argument of OR must be type boolean, not type text.

由於like子句返回字符串,這是不可推able的。但我無法在一個查詢請求中執行搜索。所以問題是如何在where條件引用2個不同的列並使用'like'運算符的情況下執行搜索。

+1

嘗試增加明確的括號組操作。我認爲你有運營商優先問題。 –

+0

你的意思是在比較參數周圍添加圓括號?如果是的話,我沒有工作 –

+0

你能告訴我你嘗試了什麼(你在哪裏添加了parens)並且確切地說「沒有工作」?請包括您的PostgreSQL版本以及EclipesLink/Hibernate /其他任何將HQL轉換成的底層SQL。您可以從PostgreSQL日誌中通過'log_statement ='all''或從您的ORM日誌中獲取。 –

回答

3

你有不正確下面括號應該工作:

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

它現在正在工作,謝謝。 –