2013-05-20 6 views
1

je la requête suivante:Spring JPA @Query clause where avec « comme » et « ou »

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

Mon produit est conçu pour fonctionner dans la plate-forme multiple, je reçois une erreur sur postgreSQL qui est:

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

Ce qui est indestructible puisque les clauses de retour de clause like. Mais je n'étais pas en mesure d'effectuer la recherche dans une demande de requête. La question est donc comment puis-je effectuer une recherche où les conditions où se réfèrent à 2 colonnes différentes et utilisent l'opérateur «j'aime».

+1

Essayez d'ajouter entre parenthèses explicites aux opérations du groupe. Je pense que vous avez des problèmes de priorité des opérateurs. –

+0

Vous voulez ajouter des parenthèses autour du paramètre de comparaison ?, Si oui, je n'ai pas travaillé –

+0

pouvez-vous * me montrer * ce que vous avez essayé (où vous avez ajouté les parens) et exactement cela "n'a pas fonctionné"? Veuillez inclure votre version de PostgreSQL et le vrai SQL sous-jacent que EclipesLink/Hibernate/quel que soit ce qui a transformé cette HQL en. Vous pouvez obtenir cela à partir des logs PostgreSQL avec 'log_statement = 'all'' ou depuis les logs de votre ORM. –

Répondre

3

Les parenthèses vous ne sont pas corriger les éléments suivants doivent travailler:

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

Ça marche maintenant, merci. –

Questions connexes