Как представить трехстороннюю связь с JPA? - PullRequest
3 голосов
/ 22 мая 2010

У пользователя может быть несколько ярлыков и ссылок. Затем пользователь связывает метку (или более) со ссылкой. Как можно представить более поздние отношения?

Решением может быть отношение «многие ко многим» между пользователем и ссылка с необязательной меткой атрибута. http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany#Mapping_a_Join_Table_with_Additional_Columns В этом случае отношения между пользователем и меткой могут быть «виртуальными».

Какой альтернативы я не вижу?

PS: я использовал терминологию закладок Google, так как она вполне соответствует моему случаю.

Ответы [ 3 ]

6 голосов
/ 22 мая 2010

Если мое понимание верно, то вы находитесь в следующем случае:

Замена троичных отношений

Когда троичные отношения происходят в модель ER они всегда должны быть снято до окончания модели. Иногда отношения могут быть заменены серией двоичных отношения, которые связывают пары оригинальные троичные отношения.

альтернативный текст http://db.grussell.org/co22001%20notes_files/image043.gif фигура : Пример троичных отношений

  • Это может привести к потере некоторой информации - это больше не ясно какой продавец продал клиенту конкретный продукт.
  • Попробуйте заменить троичные отношения на тип сущности и набор бинарных отношений.

Отношения обычно являются глаголами, поэтому Назовите новый тип объекта глагол отношения переписан как существительное.

  • Продажи отношений могут стать типом продажи объекта.

альтернативный текст http://db.grussell.org/co22001%20notes_files/image045.gif

рисунок : Замена троичных отношений

  • Таким образом, продавец может быть связан с конкретным клиентом, и оба их на продажу конкретного продукт.
  • Этот процесс также работает для отношений более высокого порядка.

И это было бы мое предложение: ввести новую сущность.

1 голос
/ 23 мая 2010

При добавлении обнуляемой метки пользовательская ссылка разрешит только одну метку для каждой ссылки. Если вам нужен только один ярлык, идите с этим.

Если вам нужно несколько ярлыков на ссылку, введите третий объект, например,

class LinkLabel
{
   @ManyToOne
   Link link;

   @ManyToOne
   Label label;  

   @ManyToOne
   User user;

}
1 голос
/ 22 мая 2010

Просто есть

class Label {
    ...
    @OneToOne
    private Link link;
}

и / или

class Link {
    ...
    @OneToOne
    private Label label;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...