我想做一对多的映射以保持秩序。订单本身很复杂并且与业务逻辑相关,并且没有单个字段或可以表示它的简单逻辑。
我想要的是加载一个对象,在列表中交换两个元素(或更多元素)并保存并执行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
}
答案 0 :(得分:3)
@OrderColumn
为我做了诀窍
答案 1 :(得分:1)
这正是Hibernate中LIST映射的目的:
<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
答案 2 :(得分:1)
使用javax.persistence.OrderBy
,您可以对多个列进行排序,这通常适用于大多数情况。
如果订单更复杂,我建议添加一个单独的方法,在内存中执行排序并返回排序列表(不可修改)。
在所有情况下,我认为不存在允许交换列表中的元素的解决方案,以便Hibernate能够理解如何更新交换的实体(即使只有1个字段的顺序):你必须自己更新子实体。