2012-06-15 2 views
0

날짜별로 하위 엔터티 목록을 주문해야합니다. 는 지금은 이런 식으로 일을 오전 : arrivalDate 및 departureDate 날짜를 포함최대 절전 모드 : @OrderBy

@OrderBy(clause = "arrivalDate ASC, arrivalTime ASC, departureDate ASC, departureTime ASC") 

는 arrivalTime 및 departureTime 시간 만 DATE 유형의 모두를 포함한다.

목록에 새 항목을 추가 할 때까지 모두 괜찮습니다. 항상 목록의 끝에 나타납니다. 어떻게 해결할 수 있습니까?

답변

5

OrderBy 절은 데이터베이스에서 항목을 최대 절전 모드로 선택할 때만 사용됩니다. 목록이 메모리에 저장되면 Java의 다른 목록으로 작동합니다. 목록에 항목을 추가하면 List.add() 메서드는 javadoc에 문서화되어있는 것처럼 작동하고 요소는 목록의 끝에 추가됩니다.

새 항목을 목록의 적절한 색인에 삽입하려면이 색인을 직접 찾거나 목록에 추가하고 항목을 기준으로 정렬하는 Comparator를 사용하여 목록을 정렬해야합니다 도착 시간, 도착 시간 등을 표시합니다.

물론 이미 목록에있는 항목에서 해당 필드 중 하나를 변경하면 목록에 더 이상 순위가없는 것으로 간주됩니다.

어쩌면 당신은 @OrderBy 어노테이션을 완전히 피하고 엔티티에 getSortedItems() 메쏘드를 추가하면 아이템 목록의 정렬 된 복사본을 반환 할 것입니다.

+0

또 다른 옵션은 제공된 비교 자로 SortedSet/SortedMap을 설정하는 @ org.hibernate.annotations.Sort를 사용하는 것입니다. –