什么是春季 JPA 中的@OneToOne映射?



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

我读过几篇帖子,但并不完全理解。

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

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

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

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

从护照我可以得到员工。

映射只不过是定义两个实体/对象之间的关系,就像声明5>4,10 = 10,6<8一样。这里的数字(5,4,10,6和8(是实体,符号(>,=和<(是它们之间的关系/映射。 我们对休眠中的映射执行相同的操作。记下这两个实体,并以更有意义的方式将它们之间的关系(映射(放在它们之间。

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

孩子多对一父亲(孩子可以很多,给一个父亲(

员工多对一公司(员工可以是多人,到一家公司(

公司一对多员工(公司可以是一对多员工(

地址一对一员工(地址可以是一对一员工(

员工一对一地址(员工可以是一对一地址(

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

假设可以将员工映射到一对一映射的公司,将员工保留为关系的所有者。然而,如果您将公司视为关系的所有者,那就是一对多。

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;
......
}

是的,你是对的。

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

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

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

访问 https://en.wikibooks.org/wiki/Java_Persistence/ManyToOne 以获取更多信息和样品。

最新更新