双向一对一关系(mappedBy)

时间:2011-07-19 04:42:56

标签: java google-app-engine jdo

  

使用字段创建双向一对一关系   这两个类,在子类的字段上都有一个注释要声明   这些字段代表双向关系。的领域   子类必须具有带参数的@Persistent注释   mappedBy =“...”,其中值是该字段的名称   父母班。如果填充了一个对象上的字段,那么   填充另一个对象上的相应参考字段   自动。

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

有人可以举个例子吗?

为什么我总是遇到这个错误。

  

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

提前致谢!

3 个答案:

答案 0 :(得分:1)

我尝试回答我从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

答案 1 :(得分:1)

听起来你有一个一对一的Employee到ContactInfo。员工只有一个联系信息,联系信息只属于一个员工。这是双向的一对一。您的错误正在发生,因为“mapped-by”需要指定引用回该对象的另一个对象的属性名称。例如,如果你有

class Employee {
    private ContactInfo contactInfo;
}

class ContactInfo {
    private Employee employee;
}

然后当你映射Employee.contactInfo属性时,它的“mapped-by”将是“employee”,因为它是在ContactInfo中“映射”的属性。

答案 2 :(得分:0)

首先出现错误
该错误的含义是contactInfo不是类com.example.datastore.ContactInfo的字段。它们映射的字段必须是要映射到的类的字段\属性 二,双向制图的概念
这只是一对一或一对多关系中的两个表,其中两个实体都将了解其他实体。你并不总是需要它,这取决于情况和背景,但通常更常见的是双向一对多而不是一对一。 你的问题是一对一的,所以给你一个例子,说明两个实体何时需要通过Hibernate docs知道彼此连接表上的双向一对一关联是可能的,但是非常不寻常。 但是如果你真的希望能够获得任何表格(这是非常罕见的),那么你就可以一对一地创建双向

人和地址只是引用一个例子