2009-09-15 4 views
16

의 주문에 의해 최대 절전 모드에서 목록을 매핑. SetList으로 대체하고 싶습니다. 컬렉션 변경 :대신 인덱스 필드이 작동

 <list name="trips" cascade="all" order-by="scheduledDate"> 
      <key column="trainId"/> 
      <one-to-many class="Trip"/> 
     </list> 

이 필요하므로 컬렉션이 작동하지 않습니다. 주문 번호는으로 주어지기 때문에 테이블에 색인을 추가하고 싶지 않습니다.

어떤 방식 으로든이 작업을 수행 할 수 있습니까? 아니면 그냥 최대 절전 모드에서 Set을 가져 와서 코드에서 직접 정렬해야합니까? 이미 DB로 주문한 경우 불필요한 것 같습니다.

답변

31

실제로 이것은 <bag>, <set> 또는 <map> 매핑을 사용하여 수행 할 수 있습니다. <bag>java.util.List 의미론을 사용하지만 요소 인덱스는 유지 관리하지 않습니다. 이 order-by 속성의 지정함으로써, 그 요소는 SELECT의 일환으로 정렬됩니다 order-by 속성이 이름 (들)이 아닌 속성 이름을 지정해야합니다

<bag name="trips" cascade="all" order-by="scheduledDate"> 
    <key column="trainId"/> 
    <one-to-many class="Trip"/> 
</bag> 

하는 것으로. 위의 내용은 java.util.List에 매핑 할 수 있으며 <set> 매핑을 사용하여 java.util.Set과 동일하게 수행 할 수 있습니다.

세부 :-) 비교기에 대한 필요가 here

+0

우수하지, 감사합니다! :-) – Magnar

+2

게시 된 링크는 이제 404를 제공합니다. http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html#collections-sorted이어야합니다. – Saheed

0

List을 사용하면 자연스럽게 주문한 항목의 컬렉션을 저장하는 올바른 방법이 아니라는 것을 알았습니다.

SortedSet (TreeSet과 같은)을 Comparator과 함께 사용하는 것이 해결책입니다.

관련 문제