2

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

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

 }
4

3 回答 3

3

@OrderColumn为我做了伎俩

于 2013-03-03T07:38:55.210 回答
2

您可以对javax.persistence.OrderBy多个列进行排序,这通常在大多数情况下都有效。

如果订单更复杂,我建议添加一个单独的方法,在内存中执行排序并返回排序列表(不可修改)。

在所有情况下,我认为不存在允许交换列表中的元素的解决方案,以便 Hibernate 了解如何更新交换的实体(即使只有 1 个字段上的订单):你必须更新孩子自己的实体。

于 2013-02-21T10:38:19.440 回答
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

于 2013-02-21T10:20:52.367 回答