Spring Data Rest投影排序

时间:2017-03-07 15:28:03

标签: java spring spring-data-rest projection

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

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

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

1 个答案:

答案 0 :(得分:5)

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

@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
    }
}