繁体   English   中英

双向一对一关系(mappedBy)

[英]bidirectional one-to-one relationship (mappedBy)

您使用两个类上的字段创建双向一对一关系,并在子类的字段上添加注释以声明字段表示双向关系。 子 class 的字段必须具有带有参数 mappedBy = "..." 的 @Persistent 注释,其中值是父 class 上的字段名称。 如果一个 object 上的字段已填充,则另一个 object 上的相应参考字段将自动填充。

双向一对一关系可以做什么?

有人可以给我一个例子吗?

以及为什么我总是得到这个错误。

Class "com.example.datastore.Employee" 具有字段 "contactInfo",其中 "mapped-by" 指定为 "contactInfo"。 该字段在关系的目标中不存在(“com.example.datastore.ContactInfo”)!!

提前致谢!

我尝试从我从 Hibernate/JPA 中学到的东西来回答(我认为这很相似)

似乎您的 ContactInfo 与 Employee 没有关系。 要使用您所描述的作为双向一对一关系的示例,您将看到类似的内容(它可能在语法上不正确,只是为了给您一个想法):

public class Employee {
  //... other relationship or fields

  @OneToOne(mappedBy="employee")  // the field in ContactInfo
  private ContactInfo contactInfo;

}

public class ContactInfo {
  @OneToOne
  @JoinColumn("EMP")
  private Employee employee;
}

持久层中的“真实”关系实际上是由 ContactInfo.employee 控制的。 设置 Employee.contactInfo 不会导致持久层包含正确的数据。

我希望这个帮助也适用于 JDO。 :P

听起来您有一对一的 Employee 到 ContactInfo。 一个员工只有一个联系信息,一个联系信息只属于一个员工。 这是一个双向的一对一。 发生您的错误是因为“映射者”需要指定引用此属性的另一个 object 的属性名称。 例如,如果您有

class Employee {
    private ContactInfo contactInfo;
}

class ContactInfo {
    private Employee employee;
}

那么当你 map Employee.contactInfo 属性时,它的“映射者”将是“员工”,因为这是它在 ContactInfo 中“映射”的属性。

首先是错误
错误的意思是contactInfo不是 class com.example.datastore.ContactInfo的字段。 它们映射的字段必须是您要映射到的 class 的字段\属性。
二、双向映射的概念
只是一对一或一对多关系中的两个表,两个实体都知道另一个。 您并不总是需要它,这取决于情况和上下文,但通常双向一对多比一对一更常见。 你的问题是一对一的,所以给你一个例子,说明两个实体何时需要从 Hibernate 文档中了解彼此连接表上的双向一对一关联是可能的,但非常不寻常。 但是,如果您真的希望能够从哪个表中获取任何一个实体(这非常罕见),那么您可以创建双向的一对一

个人和地址只是举个例子

暂无
暂无

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

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