Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Hibernate中更新一对多字段_Java_Hibernate - Fatal编程技术网

Java 在Hibernate中更新一对多字段

Java 在Hibernate中更新一对多字段,java,hibernate,Java,Hibernate,假设我有Person和Order实体,它们是单向的一对多关系 人 @Entity public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToMany(mappedBy = "person") Set<Order> orders = new HashSet<Order>(); // other fields,

假设我有
Person
Order
实体,它们是单向的
一对多关系

@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

}
如何使用新的
订单
更新
人员的
集合

我是否需要执行以下操作:

Order o = new Order();
// ???

person.setOrders(new HashSet<Order>(o));
订单o=新订单();
// ???
person.setOrders(新HashSet(o));

由于
Person
Order
OneToMany
关系,我不知道如何设置
Person
订单

您可以这样做:

person1.getOrder().add(order1)

订单1.setPerson(person1)

person1.getOrder().add(order2)

订单2.设置人员(人员1)

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

假设我有单向的Person和Order实体, 一对多关系

但您的映射表明情况并非如此。它是一种双向关系,订单类(非反向方)负责维护这种关系

如果关系是双向的,并且顺序是非反向的,则只需按顺序设置人员就足以反映数据库中的关系

order.setPerson(person);
尽管强烈建议您亲自设置订单,以便您的内存表示与关系的双向性质保持一致。还建议提供一种“加法器”方法,而不是将关系的两端设置在一个位置的“集合”。例如

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

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

您好-谢谢您的回答。从概念上讲,我似乎只需要单向关系(
Person
Order
)。你的想法是什么?我认为这应该由你对你的领域感兴趣的导航方向决定。在关系数据库中,外键驱动的所有关系都可以双向导航,但在对象模型中,您可以决定从一侧限制访问
addOrders(Order order){
        this.orders.add(order);
        order.setPerson(this);
}