Hibernate一对多,多对一关系

时间:2014-12-08 09:05:03

标签: java hibernate many-to-many one-to-many many-to-one

这两个问题回答了我的许多问题,但我仍然在努力思考实际情况!

以参考文献为例。 假设我有一个订单和多个与之关联的项目。 现在假设一个项目可以有一个返回但是一个返回可以有多个项目。

我理解的是,Order to Items will be One to Many Relation。 由于我需要获得一个项目的订单,我将创建一个列' order_fk'在Item表中获取它。

//Order entity
@OneToMany
@JoinColumn(name = "order_fk")
private List<Items> items;

//item entity
@Column(name = "order_fk")
private Long orderId;

Return to Items is One to Many mapping. One Return can have multiple Items. But one Item can have only one return id

//Return entity
@OneToMany
@JoinColumn(name = "return_fk")
private List<Items> items;

//item entity
@Column(name = "return_fk")
private Long returnId;

我在思考正确的方向吗?请让我理解这种关系和单向/双向关系。

总的来说,我应该获得一个订单项目。获取给定项目的Orderid。获取返回项目并获取给定项目的returnId。

参考:

  1. Difference Between One-to-Many, Many-to-One and Many-to-Many? Hibernate/JPA ManyToOne vs OneToMany

3 个答案:

答案 0 :(得分:1)

这应该是实体的正确映射(数据库表和列都可以)

//Order entity
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<Items> items;

//item entity
@ManyToOne
@Column(name = "order_fk")
private Order order;

//Return entity
@OneToMany(mappedBy = "return")
private List<Items> items;

//item entity
@ManyToOne
@Column(name = "return_fk")
private Return return;
第一次映射中的

cascade = CascadeType.ALL表示无论何时保存/更新/删除订单,其项目也将被保存/更新/删除,因此也可根据您的需要进行调整,也适用于其他映射。

单向关系意味着只有关系的一方知道另一方。在您的示例中,如果您从items实体中删除Return,那么ItemReturn之间将存在单向关系。如果存在items,则表示您具有双向关系。

答案 1 :(得分:0)

我认为你应该以另一种方式使用OneToMany:

// Order entity
@OneToMany(mappedBy = "columnInItemsPointingAtOrders")
private List<Items> items;

请查看文档:{​​{3}}。

还有一件事 - 你没有提供ID而是实体:

//item entity
@Column(name = "order_fk")
private Order order;

答案 2 :(得分:0)

我也是这个主题的新手。帮助我理解关系的是绘制EER图,然后将其与测试DB同步并进行实验。这不能回答你的问题,但可能会给出指示。