2017-10-08 7 views
0

@Query("select t from Menu t where (?1 is null or t.name like %?1%)")JPA @Query pour gérer la valeur du paramètre nul et que%? 1%

dans mon cas, cela peut manipuler des valeurs nulles, mais quand je n'ai aucune valeur nulle like %?1% sans effet, il n'y a pas moyen de faire recherche floue .

Je voudrais avoir le code = 4 et trouver

 
4 
546 
345 

mais seulement trouver

 
4 

Toute aide?

+0

pourquoi '@Query (" select t à partir de Menu t où (t.name comme%? 1% ou? 1 est nul) ")' peut gérer ??? – shakira

+0

Il n'existe pas de @ Query dans l'API JPA. C'est une annotation SPRING! C'est JPQL dont vous parlez – DN1

Répondre

0

La fonctionnalité que vous essayez d'utiliser avec ticket DATAJPA-292 introduit obtenu et dans les commentaires que vous trouverez la limitation qui pose des problèmes pour vous:

Une chose à noter est que les références au même paramètre ne peut être équipé que de la même expression LIKE. L'extrait de requête suivant n'est pas valide:

… firstname like %?1 and lastname like ?1% 

Comme nous ne pouvons lier qu'un seul paramètre une seule fois.

Pour contourner cette limitation, vous devriez pouvoir utiliser des expressions SpEL. Effectuez les opérations suivantes:

@Query("select t from Menu t where (?1 is null or t.name like ?#{'%'+[0]+'%'})") 

pas 100% sûr, mais je pense que cela devrait fonctionner aussi bien parce qu'il considère fondamentalement les lier à des instances comme paramètres distincts:

@Query("select t from Menu t where (?1 is null or t.name like %?#{[0]}%)")