@ ManyToMany / @ OneToMany атрибут mappedby для двунаправленной связи - PullRequest
1 голос
/ 14 февраля 2012

Я работаю над комплектом соответствия JPA для моей стажировки ... Часть этого комплекта включает тестирование правильной реализации угловых дел.

@ManyToMany имеет атрибут mappedBy.JPA заявляет, что:

String mappedBy - поле или свойство, которому принадлежит отношение.Требуется, если отношение не является однонаправленным.

Значение по умолчанию не задано - столбец по умолчанию пуст.

С учетом двунаправленного @ManyToMany - этот пример взят из JPA 2.0 JSR-317сама спецификация!

Клиент

@ManyToMany
@JoinTable(name="CUST_PHONES")
public Set<PhoneNumber> getPhones() { return phones; }

PhoneNumber

@ManyToMany(mappedBy="phones")
public Set<Customer> getCustomers() { return customers; }

Атрибут mappedBy не был определен в@ManyToMany из Customer!Есть ли по умолчанию для двунаправленных отображений, о которых я не знаю, или что?

Я посмотрел на подобные случаи и обнаружил: @OneToOne - mappedBy не является обязательным, по умолчанию нет @OneToMany - точно так же, как@ManyToMany (mappedBy не является обязательным для двунаправленного, без значения по умолчанию)

Короче, мой вопрос: Для @ManyToMany и @OneToMany, что следует поместить в атрибут mappedBy длявладеющая сторона отношений (Customer в примере)?

1 Ответ

2 голосов
/ 14 февраля 2012

Это далеко не угловой случай. Каждая двунаправленная ассоциация имеет сторону владельца и обратную сторону.

JPA использует сторону владельца, чтобы решить, существует ли связь между двумя объектами. Другая сторона игнорируется.

Сторона-владелец - это та, которая определяет способ сопоставления ассоциации (с помощью аннотаций JoinColumn, JoinTable и т. Д.). У него нет атрибута mappedBy.

Обратная сторона использует атрибут mappedBy, чтобы сказать: «Эй, я просто обратная ассоциация с ассоциацией, отображаемой следующим свойством».

Итак, по определению, сторона-владелец не имеет атрибута mappedBy. Если бы он был, он не был бы владельцем.

Это хорошо объяснено в спецификации JPA . Если вам нужно создать комплект соответствия для этой спецификации, вам лучше прочитать и понять его.

На самом деле я не вижу смысла в написании такого комплекта соответствия, как написано на домашней странице JPA2 JSR ,

В соответствии с требованиями Соглашения об участии в спецификации Java (JSPA), Java Persistence API, версия 2.0 TCK будет лицензироваться по номеру взимать без поддержки квалифицированных некоммерческих организаций. такие квалификация будет проверена тестированием на совместимость Стипендиальная программа. Поддержка также может быть предоставлена ​​бесплатно утверждение стипендиальной комиссии. Для получения дополнительной информации, пожалуйста, обратитесь до: http://java.sun.com/scholarship/.

...