Spring Data Rest 投影排序

4

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

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

我知道sort参数,但是像 api/person/search?projection=myProjection&sort=disabilityHistory.createdDate,asc 这样的请求不起作用。我找到的唯一解决方案是在我的实体中使用@OrderBy注释,但这样做会始终进行排序,而且我担心性能问题。

1个回答

6

由于您正在尝试对实体中的内部字段进行排序,因此无法在DB级别上执行排序。我使用它的方式是通过在Projection类中使用SpEL进行排序。以下是如何使用它的示例:

@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,还是它会自动被捕获?如果是自动捕获-那该怎么做呢? - Piotr
不需要,你只需将其声明为组件,它就会被自动捕获,所以如果它在Spring上下文中 - 你只需通过bean名称使用它,在这种情况下是 personProjectionHelper - yyunikov
1
是的,谢谢,它起作用了。我忘记在@-Value声明的开头添加哈希标记,导致出现500错误和一些不清晰的堆栈跟踪。我以为是因为它找不到我的@-Component。 - Piotr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接