休眠一对多和多对一的关系 [英] Hibernate One to Many and Many to One Relation

查看:141
本文介绍了休眠一对多和多对一的关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



我的理解是, Order to Items将成为一对多关系
因为我需要得到一个物品的订单,所以我会在Item表中创建一个'order_fk'列来获取它。

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

//物品实体
@Column(name =order_fk)
private Long orderId;

返回项目是一对多映射。一个返回可以有多个项目。但一个项目只能有一个返回ID

  //返回实体
@OneToMany
@JoinColumn(name =return_fk)
private List< Items>项目;

//项目实体
@Column(name =return_fk)
private Long returnId;

我的方向是否正确?请让我理解这种关系和单向/双向关系。总的来说,我应该得到订单的物品。获取给定项目的Orderid。获取退货商品并获得给定商品的退货标识。



参考:


  1. 一对多之间的区别,多对一和多对多?
    Hibernate / hibernate / JPA ManyToOne vs OneToMany


解决方案

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

  //订单实体
@OneToMany(mappedBy =order,cascade = CascadeType.ALL)
私人列表<项目>项目;

//物品实体
@ManyToOne
@Column(name =order_fk)
私人订单;

//返回实体
@OneToMany(mappedBy =return)$​​ b $ b private List< Items>项目;

//项目实体
@ManyToOne
@Column(name =return_fk)
private返回返回;

cascade = CascadeType.ALL 意味着每当您保存/更新/删除订单时,其项目也将被保存/更新/删除,因此根据您的需要在其他映射中进行调整。



单向关系意味着关系只有一方意识到另一方。在你的例子中,如果你从 Return 实体中删除了 items ,你将在项目返回。有项目目前,您有双向关系。

These two questions answered many of my questions, but I am still struggling to think about in real scenario!

Taking an example from the references. Assume I have one Order and Multiple Items associated with it. Now assume One Item can have one Returns but one Returns can have multiple Items.

What I understood is, Order to Items will be One to Many Relation. Since I need to get Order of an Item, I will create column 'order_fk' in Item table to get it.

//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;

Am I thinking in the right direction? Please make me understand this relations and uni/bi-directional relationships.

Overall, I should get Items for an Order. Get Orderid of given Item. Get Items of Returns and get returnId of given Item.

Reference:

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

解决方案

This should be the correct mapping of the entities (database tables and columns are ok)

//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 in first mapping means whenever you save/update/delete an order, its items will also be saved/updated/deleted, so adjust it to your needs, on other mapping as well.

Unidirectional relations mean only one side of the relation is aware of the other side. On your examples, if you removed items from Return entity you would have an unidirectional relation between Item and Return. With items present, you have a bidirectional relation.

这篇关于休眠一对多和多对一的关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆