有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java哪里可以找到如何使用排序的示例。顺序ignorecase(),其中nullhandling nulls last用于自定义Spring JPA如何提供查询

从周五开始,我就一直在想如何让SpringJPA查询在它提供的排序中忽略名字和姓氏的大小写。周一,我遇到两个线程(here's a link to one),建议使用Sort。顺序ignoreCase(),但还没有弄清楚如何将文档提取到工作代码中(显然我是个新手)。有人能在网上给我举一些例子吗

在我的确切情况下,我正试图弄清楚,这样,具有first和lastname属性的“单个”对象可以首先按姓氏进行比较,如果姓氏相同,则按firtname进行比较。我还需要避免空指针异常。我确实找到了一种使用比较器的方法。就我自己的教育而言,我想更好地了解这种情况是如何发生的。顺序ignoreCase()解决方案有效,看看我能否将其应用于我的情况。我


共 (1) 个答案

  1. # 1 楼答案

    不久前,我遇到了类似的情况,最终我制作了一个面向,在全球范围内处理了这个问题。如果你需要一个个案一个个案的基础上,我没有一个答案,但至少,也许这段代码可以让你朝着正确的方向前进

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