hibernate annotations:映射一个保持顺序的列表

时间:2013-02-21 10:04:18

标签: java hibernate hibernate-annotations

我想做一对多的映射以保持秩序。订单本身很复杂并且与业务逻辑相关,并且没有单个字段或可以表示它的简单逻辑。

我想要的是加载一个对象,在列表中交换两个元素(或更多元素)并保存并执行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

 }

3 个答案:

答案 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个字段的顺序):你必须自己更新子实体。