2017-10-11 2 views
0

Depuis vendredi, j'essaie de comprendre comment faire pour ignorer une requête JPA Spring prénom et nom dans la commande, il sert. Le lundi, je suis tombé sur deux threads (here's a link to one) qui suggèrent d'utiliser Sort.Order.ignoreCase() mais n'ont pas été capables de comprendre comment distiller la documentation en code de travail (clairement je suis novice). Quelqu'un peut-il me signaler quelques exemples en ligne? Dans ma situation exacte, j'essaie de faire en sorte que les objets «individuels» avec les propriétés prénom et nom puissent être comparés d'abord par nom de famille et, si les noms sont les mêmes, puis par prénom. J'ai également besoin d'éviter une exception de pointeur nul. J'ai trouvé un moyen de le faire en utilisant Comparator. Pour ma propre éducation, je veux mieux comprendre comment fonctionne cette solution Sort.Order.ignoreCase() et voir si je peux l'appliquer à ma situation. IOù trouver des exemples d'utilisation de sort.order.ignorecase() avec les nullworks nullhandling en dernier pour personnaliser la manière dont Spring JPA sert les requêtes

Répondre

0

J'ai couru à travers une situation similaire il y a quelques temps et j'ai fini par faire un aspect qui gérait cela globalement. Si vous en avez besoin au cas par cas, je n'ai pas de réponse à cela, mais à tout le moins, peut-être que ce code peut vous aider à aller dans la bonne direction.

@Aspect 
@Component 
public class SortManipulatingAspect { 

    @Around("execution(public * org.springframework.data.repository.PagingAndSortingRepository+.*(..))") 
    public Object enableIgnoreCaseSorting(ProceedingJoinPoint joinPoint) throws Throwable { 

     return joinPoint.proceed(
       Arrays.stream(joinPoint.getArgs()).map(SortManipulatingAspect::sortWithIgnoreCase).toArray() 
     ); 
    } 

    private static Object sortWithIgnoreCase(Object arg) { 
     if (arg instanceof PageRequest) { 
      return pageRequestIgnoreCaseSort((PageRequest)arg); 
     } else { 
      return arg; 
     } 

    } 

    private static PageRequest pageRequestIgnoreCaseSort(PageRequest pageRequest) { 
     return new PageRequest(
       pageRequest.getPageNumber(), 
       pageRequest.getPageSize(), 
       pageRequest.getSort() != null ? new Sort(toOrderStream(pageRequest.getSort())) : null 
     ); 
    } 

    private static List<Sort.Order> toOrderStream(Sort sort) { 
     return StreamSupport.stream(sort.spliterator(), false) 
       .map(Sort.Order::ignoreCase) 
       .collect(Collectors.toList()); 
    } 

}