这两个问题回答了我的许多问题,但我仍然在努力思考实际情况!
以参考文献为例。 假设我有一个订单和多个与之关联的项目。 现在假设一个项目可以有一个返回但是一个返回可以有多个项目。
我理解的是,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。
参考:
答案 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
,那么Item
和Return
之间将存在单向关系。如果存在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同步并进行实验。这不能回答你的问题,但可能会给出指示。