繁体   English   中英

休眠一对多和多对一关系

[英]Hibernate One to Many and Many to One Relation

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

以参考文献为例。 假设我有一个订单和与其关联的多个项目。 现在假设一件物品可以有一个退货,但是一件物品可以有多个退货。

我了解的是, Order to Items will be One to Many Relation 由于我需要获取商品的订单,因此我将在商品表中创建列“ order_fk”来获取商品。

//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. 一对多,多对一和多对多的区别? Hibernate / JPA ManyToOne与OneToMany

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

//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意味着每当您保存/更新/删除订单时,其项目也将被保存/更新/删除,因此也可以在其他映射上根据您的需要进行调整。

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

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

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

请检查文档: http : //docs.oracle.com/javaee/6/api/javax/persistence/OneToMany.html

还有一件事-您没有获得ID,而是实体:

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

我也是这个主题的新手。 帮助我理解这些关系的是绘制EER图,然后将其同步到测试数据库并进行实验。 这不能回答您的问题,但可以提供指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM