在Hibernate中更新一对多字段

时间:2014-07-07 16:39:28

标签: java hibernate

假设我有PersonOrder个实体处于单向,one-to-many关系中。

@Entity
public class Person {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @OneToMany(mappedBy = "person")
  Set<Order> orders = new HashSet<Order>();

  // other fields, constructor, setters and getters

}

顺序

@Entity
public class Order {

  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column(name = "id")
  Person person;

  // other fields, constructor, setters and getters
}

如何使用新的Person更新Set<Order>的{​​{1}}?

我是否需要做以下事情:

Order

由于Order o = new Order(); // ??? person.setOrders(new HashSet<Order>(o)); Person的关系OneToMany,我不确定如何设置Order的{​​{1}}。

2 个答案:

答案 0 :(得分:1)

您可以这样做:

person1.getOrder()添加(order1);

order1.setPerson(PERSON1);

person1.getOrder()添加(order2);

order2.setPerson(PERSON1);

您可以在循环中使用此多个订单

答案 1 :(得分:1)

  

我们说我有单向的人和命令实体,   一对多的关系。

但是你的映射表明不然。它与Order类(非反面)的双向关系有责任维护关系。

如果关系是双向的,Order为非反面,则只有在Order中设置person才足以反映数据库中的关系。

order.setPerson(person);

虽然强烈建议您同时设置Orders in Person,以便您的内存中表示与关系的双向性质一致。还建议提供一个&#34;加法器&#34;方法在人而不是&#34;设置&#34;它将关系的两端设置在一个地方。例如,

addOrders(Order order){
        this.orders.add(order);
        order.setPerson(this);
}

此外,如果您想实际实现单向一对多,您可能需要阅读this讨论。