[英]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.