建模和描述实体之间的关系可能对新手开发人员来说可能是一个困难,但是在JPA的情况下,如果没有得到适当的护理,它可能会变得一团糟。当我了解这项技术时,我创建了一个简短的指南来帮助我,我依靠它到了今天。只是我对Java社区的小贡献!
OneTomany OU Manutoone关系
规则:通常许多是关系的所有者。
示例:客户和订单。
要问的问题:
- 客户可以有多少订单吗?
- 订单可以属于多少客户?
- 我需要知道哪些客户订单?
- 我需要知道每个订单的哪个客户?
- 该关系的所有者是谁?
答案:
- []客户可能有订单。 (oetomany)
- []订单可能仅属于一个客户。 (Manytooe)
- []我不需要知道每个客户的请求,但是我需要了解每个订单的客户。 (单向)
- []请求是关系的所有者。
因此,我们得出的结论是,客户可能徒劳地要求,但订单仅属于一个客户。
在请求的类中,我们声明了带有注释的客户端属性:
- @manytooe(因为许多请求只能有一个客户(toone)
- @joincolumn(name =âculting_id)使用客户ID创建数据库中的列
类请求:
@ManyToOne
@JoinColumn(name = “cliente_id”)
private Cliente cliente;
在客户端类中,我们声明并实例化了带有注释的请求:
- @jsonignore(对于HTTP签名的JSON响应,请忽略此列表,而不是创建客户和客户订单循环,生成堆栈溢出,毕竟我们需要知道这些项目)。 Jonignore的替代方案可以是使用dtos。
- @Onetomany(mappedby =âtubertic),因为客户端(一个)可以有订单(tomany),所以mappedby Metro Metro是映射请求的类属性(必须与类中的属性完全相同) li>
客户类:
@OneToMany(mappedBy = “cliente”)
private List<Pedido> pedidos;
Manytomany的关系
示例:产品可能属于几个类别,并且类别具有产品。
要问的问题:
- 产品可以属于多少类?
- 类别可以有多少产品?
- 我需要知道类别具有哪些产品吗?
- 我需要知道产品属于哪些类别?
- 该关系的所有者是谁?
答案:
- []产品可能属于各种类别。 (Manytomany)
- []类别可以有产品。 (Manytomany)
- []我需要知道类别具有哪些产品,并且还知道产品属于哪些类别。 (双向)
- []产品是关系的所有者。
因此,我们得出的结论是,产品可能属于多个类别,并且类别可能具有产品。在这种情况下,我们必须使用@jointable创建一个关联表。由于产品具有此表示法,因此暗示该产品是关系的所有者。
在产品类中,我们声明并实例化了与注释的类别集合:
- @manytomany(因为许多产品可能是徒劳的类别(tomany)
- @jointable(创建一个新表)
- @joincolumn( @jointable创建列)
产品类:
@ManyToMany
@JoinTable(name = "tb_product_category",
joinColumns = @JoinColumn(name = "product_id"),
inverseJoinColumns = @JoinColumn(name = "category_id"))
private Set<Category> categories = new HashSet<>();
在类别类中,我们声明并实例化了一系列用注释的产品:
- @manytomany(mappedby =â类)映射产品类别的集合,并指出该关系的所有者是产品。
类别类:
@ManyToMany(mappedBy = "categories")
private Set<Product> products = new HashSet<>();
OneToone关系
示例:用户可以具有关联的配置文件,并且配置文件仅属于一个用户。
要问的问题:
- 用户可以拥有多少个配置文件?
- 个人资料可以属于多少用户?
- 我需要知道每个常规的个人资料吗?
- 我需要知道与每个配置文件关联的用户吗?
- 该关系的所有者是谁?
答案:
- []用户只能具有一个配置文件。 (onetooone)
- []一个配置文件只能属于一个用户。 (onetooone)
- []我需要知道每个用户的配置文件,也需要与每个配置文件相关的通常。 (双向)
- []用户是关系的所有者。
因此,我们得出的结论是,一个用户只能具有一个配置文件,并且配置文件仅属于一个用户。在这种情况下,用户将是关系的所有者。
在 Usuario
类中,我们声明属性 perfil
带有注释:
@OneToOne(mappedBy = "usuario")
private Perfil perfil;
在 Perfil
类中,我们声明了属性 usuario
带有注释:
@OneToOne
@JoinColumn(name = "usuario_id")
private Usuario usuario;
@OneToOne
来指示一对一的关系。 Perfil
类具有 @JoinColumn
注释,可以使用意志的 id
创建数据库列,该列将用于映射关系。 Usuario
类使用笔记本mappedBy
在属性 perfil
中表明该关系是由属性 usuario
映射的在 Perfil
中。类
因此,我们在 Usuario
和 Perfil
之间有一对一的关系,其中用户只能具有一个配置文件,一个配置文件仅属于一个通常。