2013-02-21 6 views
1

주문을 유지하는 일대 다 매핑을 원한다. 주문 자체는 복잡하고 비즈니스 로직과 관련이 있으며이를 나타낼 수있는 단일 필드 또는 간단한 로직을 가지고 있지 않습니다.hibernate annotations : 순서를 유지하는리스트 매핑

내가 원하는 것은 개체를로드하고 목록에서 두 개 요소 (또는 그 이상)를 교환하고 저장하여 session.update(object)을 수행하는 것입니다. 다음 번에 엘리먼트가로드되어 올바른 순서를 유지할 것으로 예상되지만 그렇지 않습니다. 당신이 @OrderBy를 사용할 필요가 주석

<list name="friends"> 
     <key column="M_ID" not-null="true"/> 
     <list-index column="M_INDEX"/> 
     <one-to-many class="Person"/> 
    </list> 

http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html#collections-indexed

답변

3

@OrderColumn 트릭을 수행했습니다.

1

: 내가 뭐하는 거지

javax.persistence.OrderBy을 사용하면 대부분의 경우에 일반적으로 작동하는 여러 열을 정렬 할 수 있습니다.

더 복잡한 경우 메모리에서 정렬을 수행하고 정렬 된 목록을 수정할 수없는 형식으로 반환하는 별도의 메서드를 추가하는 것이 좋습니다.

모든 경우에 Hibernate가 (1 필드의 순서만으로도) 스왑 된 엔티티를 업데이트하는 방법을 이해할 수 있도록 목록의 요소를 스왑 할 수있는 솔루션이 있다고 생각하지 않습니다. 자신이 하위 엔티티를 업데이트해야합니다.

+0

감사합니다. 최대 절전 모드 주석을 참조하십시오. (나는 나의 질문을 분명히했다) – flybywire

+0

주석을 포함시키기 위해 나의 대답을 편집했다. – overmeulen

1

를 참조하십시오이 정확히 최대 절전 모드에서 LIST 매핑의 목적이다

@Entity 
public class Product { 

@Id @GeneratedValue(strategy=GenerationType.AUTO) 
private long id; 
@OneToMany(fetch=FetchType.EAGER) 
private List<Image> images = new ArrayList<Image>(); 

    blah blah blah 

}