2017-03-07 1 views
1

나는 내 엔티티에 대한 투영을 가지고 있으며 내부 클래스의 필드로 정렬해야합니다. 나는 약 sort PARAM을 알고 있지만 작동하지 않습니다 api/person/search?projection=myProjection&sort=disabilityHistory.createdDate,asc 같은 요청스프링 데이터 나머지 투영 정렬

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

: 이것은 내 개체의 일부입니다. 내가 찾은 유일한 해결책은 내 엔터티에서 @OrderBy 주석을 사용하고 있지만이 경우에는 항상 정렬되며 성능에 대해 걱정이됩니다.

답변

2

엔티티에서 내부 필드를 정렬하려고하므로 DB 수준에서 수행 할 수 없으므로 작동하지 않습니다. 내가 사용한 방법은 Projection 클래스에서 SpEL을 사용하여 정렬하는 것입니다.

@Projection(
     name = "sorted", 
     types = Person.class 
) 
public interface PersonProjection { 

    @Value("#{@personProjectionHelper.sortedByDisabilityHistory(target.disabilityHistory)}") 
    List<DisabilityHistory> getDisabilityHistory(); 
} 

그리고 자바의 정렬 구현 :

@Component 
public class PersonProjectionHelper { 

    public List<DisabilityHistory> sortByDisabilityHistory(final List<DisabilityHistory> list) { 
     // do the sorting on Java level 
    } 
} 
+0

우리가 어떻게 든 PersonProjectionHelper 주입해야하거나 자동으로 선택되어 수행을 이것은 당신이 그것을 할 수있는 방법의 예입니다? 그렇다면 어떻게해야합니까? – Piotr

+0

아니요, 그냥 컴포넌트로 선언하면 자동으로 선택됩니다. 따라서 스프링 컨텍스트에있는 경우 bean 이름 (이 경우에는 personProjectionHelper)으로 사용하면됩니다. –

+0

그래, 고마워. @ -Value 선언의 시작 부분에 해시를 추가하는 것을 잊어 버렸고 일부 불명확 한 스택 추적으로 500을 얻었습니다. 내 @ -Component를 찾을 수 없기 때문에 그것이라고 생각했습니다. – Piotr

관련 문제