【问题标题】:Spring Data Rest projection sortingSpring Data Rest 投影排序
【发布时间】:2017-07-27 21:17:46
【问题描述】:

我有一个实体的投影,我需要按内部类的字段对其进行排序。这是我的实体的一部分:

class Person {
    UUID guid;
    Set<DisabilityHistory> disabilityHistory;
}
class DisabilityHistory {
    Date createdDate;
}

我知道sort 参数,但像api/person/search?projection=myProjection&amp;sort=disabilityHistory.createdDate,asc 这样的请求不起作用。我发现的唯一解决方案是在我的实体中使用 @OrderBy 注释,但在这种情况下,它总是会排序,我担心性能。

【问题讨论】:

    标签: java spring spring-data-rest projection


    【解决方案1】:

    当您尝试对实体中的内部字段进行排序时,这将不起作用,因此您无法在数据库级别执行此操作。我使用它的方式是使用SpELProjection 类中对其进行排序。这是一个如何做到这一点的示例:

    @Projection(
            name = "sorted",
            types = Person.class
    )
    public interface PersonProjection {
    
        @Value("#{@personProjectionHelper.sortedByDisabilityHistory(target.disabilityHistory)}")
        List<DisabilityHistory> getDisabilityHistory();
    }
    

    并用Java实现排序:

    @Component
    public class PersonProjectionHelper {
    
        public List<DisabilityHistory> sortByDisabilityHistory(final List<DisabilityHistory> list) {
            // do the sorting on Java level
        }
    }
    

    【讨论】:

    • 我们必须以某种方式注入 PersonProjectionHelper 还是自动获取?如果是这样 - 怎么做?
    • 不,你只是将它声明为一个组件,它会被自动拾取,所以如果它在 spring 上下文中 - 你只需按 bean 名称使用它,在这种情况下 personProjectionHelper
    • 是的,谢谢它的工作。我忘记在 @-Value 声明的开头添加哈希,并且得到了 500 并带有一些不清楚的堆栈跟踪。我以为是因为它找不到我的@-Component。
    猜你喜欢
    • 2018-04-18
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 2019-01-27
    • 1970-01-01
    • 2018-03-05
    • 2015-02-05
    相关资源
    最近更新 更多