繁体   English   中英

最后在哪里找到如何将sort.order.ignorecase()与null处理null一起使用的示例,以自定义Spring JPA如何提供查询

[英]Where to find examples of how to use sort.order.ignorecase() with nullhandling nulls last to customize how Spring JPA serves up queries

从星期五开始,我一直在试图找出如何使Spring JPA查询忽略其服务顺序中的姓和名的大小写。 星期一,我遇到了两个建议使用Sort.Order.ignoreCase()的线程( 这是一个链接 ),但还无法弄清楚如何将文档提取为工作代码(显然我是新手) 。 谁能在网上给我指出一些例子?

在我的确切情况下,我试图确定具有名字和姓氏属性的“单个”对象可以首先按姓氏进行比较,如果姓氏相同,则可以按名字进行比较。 我还需要避免空指针异常。 我确实找到了一种使用比较器来实现此目的的方法。 对于我自己的教育,我想更好地了解Sort.Order.ignoreCase()解决方案的工作原理,并查看是否可以将其应用于我的情况。 一世

不久前,我遇到了类似的情况,最终制作了一个可以在全球范围内处理此问题的Aspect。 如果您根据具体情况需要它,我没有答案,但是至少,也许这段代码可以使您朝正确的方向前进。

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

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM