当前位置: 首页 > 知识库问答 >
问题:

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

淳于涛
2023-03-14

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

我读过一些帖子,但没有完全理解。

共有3个答案

卫劲
2023-03-14

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

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;
  ......
}
翁钧
2023-03-14

映射只是定义两个实体/对象之间的关系,就像声明5

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

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

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

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

地址一个员工(地址可以是一个,给一个员工)

员工一个一个地址(员工可以是一个,到一个地址)

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

上官波鸿
2023-03-14

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

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

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

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

我可以从护照上找到员工。

 类似资料:
  • 问题内容: 我正在尝试使Hibernate @OneToOne注释正常工作,并且在这里没有太大的成功… 假设我有一个名为的表格,看起来像这样: 我有一个看起来像这样的实体: 还有一个类似的,另一个实体看起来像这样: 当我进行读取时,我希望它将返回带有的对象。相反,我得到一个AnnotationException:“引用的属性不是(One | Many)ToOne:mappedBy User.sta

  • 我有两个名为用户和从属的实体。我想在这两个实体之间建立一种一刀切的关系。正如OneToOne的真正含义所述- 用户实体中的每个用户都应该有且只有一个依赖项。并且Dependents实体中的每个dependent应该只与一个且仅与一个用户相关。 但当我将@OneToOne添加到Dependents实体时,它并不能阻止我将两个Dependent添加到同一个用户。@OneToOne或任何其他关系注释(如

  • 问题内容: 拥有方 到底是什么意思?一些映射示例( 一对多,一对一,多对一 )的解释是什么? 以下文本摘录自Java EE 6文档中 @OneToOne 的描述。您可以在其中看到概念 拥有的一面 。 定义与另一个具有一对一多重性的实体的单值关联。通常不必显式指定关联的目标实体,因为通常可以从被引用对象的类型中推断出该目标实体。如果关系是双向的, 则非拥有方 必须使用OneToOne批注中的mapp

  • 蜻蜓映射是一款动态域名解析软件,外网通过蜻蜓映射域名随时随地访问到内网搭建服务。 蜻蜓映射是内网穿透,端口映射的软件服务商。支持HTTP、HTTPS、TCP、UDP、等多种协议。 无需设置路由器端口映射即可外网访问内网服务器。适用于远程桌面、 远程服务器、远程办公、游戏联机、微信开发调试等内网穿透场景。蜻蜓映射端口映射官网 如何使用蜻蜓映射 注册账号 下载客户端并登录 添加映射

  • 我有2个实体:Field和ViewOptions 省略与问题无关的字段和方法

  • 问题内容: 假设我有个人 和工作 提取时,我无法将Person和Job映射到其他实体。 我在做什么错? 问题答案: 您的代码应为: (尝试从工作中删除重复的列’person_id’) 或其他共享主键的方法: