2017-10-11 65 views
0

自从周五以来,我一直在试图弄清楚如何使Spring JPA Query忽略大小写在它提供的顺序中的名字和姓氏。星期一,我遇到了两个线程(here's a link to one),它们建议使用Sort.Order.ignoreCase(),但一直未能弄清楚如何将文档提炼为工作代码(显然,我是新手)。任何人都可以在网上给我一些例子吗?哪里可以找到如何使用带有nullhandling空值的sort.order.ignorecase()的例子来定制Spring JPA如何提供查询

在我的确切情况下,我试图弄清楚如何使具有first和lastname属性的“Individual”对象可以先按姓氏进行比较,如果姓氏相同,则按名字进行比较。我还需要避免空指针异常。我确实找到了一种通过使用比较器来实现这一点的方法。对于我自己的教育,我想更好地了解这个Sort.Order.ignoreCase()解决方案是如何工作的,看看我是否可以将它应用于我的情况。我

回答

0

我跑过类似的情况,而且我最终做出了一个处理全局的方面。如果你需要一个一个的案例,我没有答案,但至少,这个代码可以让你朝着正确的方向前进。

@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()); 
    } 

} 
相关问题