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);
}