我有一个实体投影,我需要按内部类字段对其进行排序。这是我实体的一部分:
class Person {
UUID guid;
Set<DisabilityHistory> disabilityHistory;
}
class DisabilityHistory {
Date createdDate;
}
我知道 sort
参数,但像 api/person/search?projection=myProjection&sort=disabilityHistory.createdDate,asc
这样的请求不起作用。我找到的唯一解决方案是在我的实体中使用 @OrderBy
注释,但在这种情况下,它将始终排序,我担心性能。
最佳答案
这将不起作用,因为您正在尝试对实体中的内部字段进行排序,因此您不能在数据库级别执行此操作。我使用它的方式是在 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
}
}
关于java - Spring Data Rest 投影排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42652129/