哪种集合类型可以在hibernate中进行映射选择

时间:2011-08-11 17:36:59

标签: java hibernate

我有两个实体,即客户和订单。一个客户有多个订单。我试图双向一对多,多对一。所以,我可以选择哪个收集对象,包,地图等。所以,什么基础我可以使用一对多和多对一的双向关系选择收集对象吗?

1 个答案:

答案 0 :(得分:2)

如果每个订单都是唯一的且客户在同一个集合中不能拥有相同的订单两次,请使用Set否则使用List

首先,请记住,您必须为每个类重写equals()和hashCode()函数:

使用List时,您可以用不同的方式映射它:

  • 订购列表,其中订单未在数据库中实现
  • 索引列表,其中订单在数据库中具体化

有序列表以下列方式实现:

@OneToMany(mappedBy="customer")
   @OrderBy("number")
   public List<Order> getOrders() { return orders; }

索引列表以下列方式映射:

  @OneToMany(mappedBy="customer")
   @OrderColumn(name="orders_index")
   public List<Order> getOrders() { return orders; }

要将索引值存储在专用列中,请使用属性上的@javax.persistence.OrderColumn注释。此注释描述了保持索引值的列的列名和属性。此列托管在包含关联外键的表上。如果未指定列名,则默认值为引用属性的名称,后跟下划线,后跟ORDER(在以下示例中,它将是orders_ORDER)。

如果你想使用Set<Order>,这很简单:

  @OneToMany(mappedBy="customer")
  public Set<Order> getOrders() { return orders; }

希望它有所帮助。