繁体   English   中英

Spring JPA 中的@OneToOne 映射是什么?

[英]What is @OneToOne mapping in spring JPA?

我是 Spring 数据 jpa 的新手,并试图了解 @OneToOne 映射。 假设我有一个员工实体和一个公司实体,如果我想映射这两个实体,那么我可以在员工实体上使用一对一映射,这意味着一名员工只能属于一家公司。 这种理解有错吗? 如果一名员工属于一家公司(比方说 XYZ),那么公司(XYZ)不能映射到另一名员工?

我读了几篇文章,但没有完全理解。

@OneToOne 表示如果我们有 Employee 和 Passport 实体,那么只有一个实体对象与另一个实体相关,因此只有一个 Passport 与一个员工相关,并且肯定有一个员工的一个对象与 Passport 中的一个对象相关

@Entity
Public class Employee
{
      @OneToOne
      private Passport passport;
}

所以从员工那里我可以拿到他的护照

@Entity
Public class Passport
{
      @OneToOne
      private Employee employee;
}

从 Passport 我可以得到 The Employee。

映射只不过是定义了两个实体/对象之间的关系,就像陈述 5>4, 10=10, 6<8 一样。 此处的数字(5、4、10、6 和 8)是实体,符号(>、= 和 <)是它们之间的关系/映射。 我们对休眠中的映射也做同样的事情。 记下这两个实体,并以更有意义的方式将它们之间的关系(映射)放入其中。

父亲一对多孩子(父亲可以是一个,对许多孩子/孩子)

孩子多对一个父亲(孩子/孩子可以是多个,一个父亲)

Employee ManyToOne Company(员工可以是多人,对一个公司)

公司 OneToMany 员工(公司可以是一个,也可以是多个员工)

Address OneToOne Employee(地址可以是One,To One Employee)

员工一对一地址(员工可以一对一,一对一地址)

这种关系应该是有道理的。 这意味着当您从关系的双方来看关系时,这应该是有意义的(一个孩子多父亲没有意义,但一个父亲多孩子/孩子有意义)

是的,你是对的。

如果您希望公司有多个员工,那么您需要员工和公司之间的多对一关系,以及公司和员工之间的一对多关系。

实际上,在这种情况下,您必须使用一对多关系。 您可以简单地在与员工实体相关的公司实体中使用@ManytoOne 注释。

指定到另一个具有多对一多重性的实体类的单值关联。 通常不需要明确指定目标实体,因为它通常可以从被引用的对象类型推断出来。 如果关系是双向的,则非拥有 OneToMany 实体端必须使用 mappingBy 元素来指定作为关系所有者的实体的关系字段或属性。

访问https://en.wikibooks.org/wiki/Java_Persistence/ManyToOne了解更多信息和示例。

假设一个员工可以映射到一个公司,该公司是一对一的映射,保持员工作为关系的所有者。 而如果您将公司视为关系的所有者,则它是一对多的。

Case 1 : Employee as Owner

@Entity
Public class Employee
{
  @ManyToOne
  private Company company;
 ......
}

@Entity
Public class Company
{
  @OneToMany(mappedBy="company") \\ mappedBy is used to say that Employee is owner and 
                               \\it should match variable name company
  private List<Employee> employee;
  ......
}

暂无
暂无

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

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