2017-07-24 2 views
0

Je travaille sur un projet qui a un référentiel JPA avec des requêtes. Une des requêtes a un And et Or à la même requête, mais cela ne fonctionne pas correctement.JPA Repository Query Language - ET avec OU ne fonctionne pas correctement

List<Partner> findDistinctByUserNameNotNullAndPartnerNoInAndUserNameLikeOrFirstNameLikeOrderByPartnerNo(
     List<Integer> partnerNos, String userName, String firstName); 

Ce qui se passe est que lorsque je passe no Filter retourne autour 65 rows, quand je passe un Filter par exemple « MAR » retourne 265 rows qui n'a pas de sens puisque la requête sans filtres est aller chercher toutes les lignes. Ce que j'ai observé, c'est qu'au UserNameLikeOrFirstNameLike le Or divise la requête. Il est à la recherche d'un Partner dans la liste avec le UserName LikeOR he just looks for a FirstName like something else.

Je sais quel est le problème, mais je ne sais pas comment le résoudre. Pour faire court: comment mettre un And et un Or dans la même requête JPA et le faire fonctionner correctement?

Merci!

Répondre

0

Si vous avez un besoin pour y parvenir en utilisant la méthode du référentiel nommé ce sera comme:

findDistinctByUserNameNotNullAndPartnerNoInAndUserNameLikeOrPartnerNoInAndFirstNameLikeOrderByPartnerNo(List<Integer> partnerNos, String userName, String firstName); 

, mais il est toujours recommandé d'utiliser des noms de méthode courte et facile à lire, pour lesquels vous pouvez utiliser JPA NamedQueries ou @Query