двунаправленное отношение один-к-одному (mappedBy) - PullRequest
0 голосов
/ 19 июля 2011

Вы создаете двунаправленное отношение один к одному , используя поля на оба класса, с аннотацией в поле дочернего класса для объявления что поля представляют двунаправленную связь. Поле дочерний класс должен иметь аннотацию @Persistent с аргументом mappedBy = "...", где значением является имя поля на родительский класс. Если поле на одном объекте заполнено, то соответствующее ссылочное поле на другом объекте заполнено автоматически.

Что могут двунаправленные отношения один-к-одному ?

Может кто-нибудь привести пример?

И почему я всегда получаю эту ошибку.

Класс "com.example.datastore.Employee" имеет поле "contactInfo" с "сопоставленный", указанный как "contactInfo". Это поле не существует в цель отношения ("com.example.datastore.ContactInfo") !!

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 19 июля 2011

Звучит так, как будто у вас есть один сотрудник в ContactInfo.Сотрудник имеет ровно одну контактную информацию, а контактная информация принадлежит ровно одному сотруднику.Это двунаправленный один к одному.Ваша ошибка происходит, потому что «сопоставленный» должен указать имя свойства другого объекта, который ссылается на этот объект.Например, если у вас есть

class Employee {
    private ContactInfo contactInfo;
}

class ContactInfo {
    private Employee employee;
}

, то при сопоставлении свойства Employee.contactInfo его «сопоставляемым» будет «сотрудник», поскольку это свойство, которое «сопоставляется» в ContactInfo.

1 голос
/ 19 июля 2011

Я пытаюсь ответить на основании того, что я узнал из Hibernate / JPA (что, на мой взгляд, похоже)

Похоже, что ваше ContactInfo не имеет отношения к Сотруднику.Чтобы использовать то, что вы описали в качестве примера для двунаправленных отношений один-к-одному, вы увидите что-то вроде (это, вероятно, не синтаксически правильно, просто чтобы дать вам представление):

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

0 голосов
/ 19 июля 2011

Сначала ошибка
Ошибка говорит о том, что contactInfo не является полем класса com.example.datastore.ContactInfo. Отображаемое поле должно быть полем \ свойством класса, которому вы отображаете.
Second Концепция двунаправленного картографирования
Просто две таблицы в отношениях один-к-одному или один-ко-многим, где обе сущности будут знать о других. Вам это не всегда нужно, и это зависит от ситуации и контекста, но, как правило, чаще бывает двунаправленный один ко многим, чем один к одному. Ваш вопрос касается взаимно-однозначного отношения, поэтому приведем пример, когда обеим сущностям нужно знать друг о друге из документов Hibernate Двунаправленная взаимно-однозначная связь на соединительном столе возможна, но крайне необычна. Но если вы действительно хотите иметь возможность получить любой из этих столов (что очень редко), то вы создаете двунаправленный один к одному

Персона и Адрес, чтобы процитировать пример

...