2010-05-25 2 views
2

어노테이션에 hibernate를 사용하면 one many relationship을 'many'테이블의 'created'필드로 정렬하기를 원한다.어노테이션에 하이버 네이트를 사용할 때, 하나의 many 관계가 정렬되기를 원한다.

// The notes 
@OneToMany 
@JoinColumn(name="task_id") 
Set<TaskNote> notes; 
public Set<TaskNote> getNotes() {return notes;} 
public void setNotes(Set<TaskNote> notes) {this.notes = notes;} 
+0

내가 세트를 목록으로 변경하고 @OrderBy ("created")를 사용해야한다고 생각하지만 결코 나를 위해 작동하지 않는 것 같습니다. – Chris

+0

아 잠깐, 지금은 잘 작동합니다. 음, 누군가가 더 나은 해결책을 가지고 있다면, 나는 여전히 관심이 있습니다. – Chris

답변

5

:

@OneToMany 
@JoinColumn(name="task_id") 
@OrderBy("created") 
List<TaskNote> notes; 
public List<TaskNote> getNotes() {return notes;} 
public void setNotes(List<TaskNote> notes) {this.notes = notes;} 

Set가 정렬되지 않은입니다, 그래서 대신 List를 사용하여, 당신은 너무 @OrderBy 주석이 필요합니다.

+0

내 대답은 완전한 해결책이었습니다. 주문을 성취하기 위해 @OrderBy를 지정할 필요가 없으며 데이터를 검색하는 방법에 지정할 수 있습니다. @OrderBy가 동적이 아니기 때문에 이것이 더 융통성 있다고 주장 할 것입니다. – Jeff

+0

괜찮아요. OP 질문에 대한 표현이 항상 특정 방식으로 주문하기 위해 특수 효과를 사용하고 싶어한다는 것을 나타내는 것으로 보입니다. – oedo

2

사용에게 목록을 대신 세트의 :

지금까지 내가 항상 임의의 순서로 끝나는이를 가지고있다. 목록은 순서를 유지하지만 Set은 유지하지 않습니다. 목록을 사용하면 요소의 순서는 HQL의 ORDER BY에 대해 지정하거나 조건을 사용하여 지정하는 것과 일치합니다.

2

두 가지 옵션이 있는데, @OrderBy("created") 중 하나를 사용하면 SQL에서 기대하는 바를 수행 할 수 있습니다.

어떤 이유로 든 메모리를 정렬하려면 임의의 비교기 구현을 지정할 수있는 @Sort을 사용할 수도 있습니다.

편집 : 예측할 수없는 반복 순서는 HashSet의 구현 세부 사항이며 Set 인터페이스 계약의 일부가 아닙니다. Hibernate는 XML 매핑을 사용하고 집합에 순서를 지정할 때 LinkedHashSet을 행복하게 사용할 것이다. 주석을 사용할 때도 똑같이한다고 가정했는데, 그것이 틀렸다면 사과드립니다. 도 대답은 당신에게 전체 솔루션을 준 이후

관련 문제