2013-02-21 45 views
1

我想做一個保持順序的一對多映射。訂單本身很複雜,並且與業務邏輯相關,並且沒有可以表示它的單個字段或簡單的邏輯。休眠註釋:映射一個保持順序的列表

我想要的是加載一個對象,交換列表中的兩個元素(或更多)並保存並執行session.update(object)。我期望下次元素被加載,以保持正確的順序,但事實並非如此。

我在做什麼:

@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 

} 

回答

1

這也正是LIST映射在Hibernate的目的:

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

對於需要使用@OrderBy註釋,見http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/collections.html#collections-indexed

+0

謝謝。請參考休眠註釋。 (我已經澄清了我的問題) – flybywire 2013-02-21 10:28:26

+0

我編輯了我的答案以包含註釋 – overmeulen 2013-02-21 10:39:15

1

通過javax.persistence.OrderBy,您可以對多個列進行排序,這些列通常在大多數情況下都適用。

如果順序更復雜,我會建議添加一個單獨的方法,在內存中執行排序並返回排序列表(作爲不可修改的)。

在所有情況下,我不認爲存在一個解決方案可以允許交換列表中的元素,以便Hibernate能夠理解如何更新交換實體(即使只有1字段的順序):您有自己更新子實體。