2017-10-11 62 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()); 
    } 

} 
相關問題