Двунаправленное сопоставление JPA «многие ко многим» с подтипами - PullRequest
0 голосов
/ 14 февраля 2012

Мой основной сценарий - это двунаправленное отношение «многие ко многим», которое сопоставляется с JPA. Достаточно просто. Однако мне нужно добавить «тип» в отображение, и я борюсь с лучшей реализацией. Вот схема:

Network
   Set<Member> defaultMembers; //members that meet the network definition
   Set<Member> suppressedMembers; //members that meet the network definition, but are hidden.
   Set<Member> addedMembers; //memders that don't meet the network definition, but have been added in anyway.

Member
   Set<Network> attachedNetworks;

Если мне не нужно, чтобы это было двунаправленным (например, мне нужно было только получать доступ к участникам из сетей и не нужно было иметь возможность путешествовать в другую сторону), наиболее очевидным решением для меня является одно таблица ссылок для каждого набора членов (network_member, suppressed_member, added_member), но она разваливается в другую сторону. Я полагаю, что я мог бы использовать одну таблицу ссылок и превратить ее в объект со столбцом дискриминатора, но каждый раз, когда я видел, как кто-то использует таблицу ссылок в качестве объекта, код, кажется, превращается в катастрофу.

Я нашел много похожих вопросов, но вопросы были либо слишком конкретными, либо ответы не совсем охватили решение, которое я ищу. Любые предложения о том, как лучше всего справиться с этой ситуацией?

1 Ответ

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

Существуют следующие очевидные портативные решения:

  1. использовать три таблицы соединения, а также иметь 3 набора сетей в объекте Member
  2. использовать дополнительный объект Attachment, имеющий участника, сеть и тип вложения (по умолчанию, подавлено или добавлено). Иметь двунаправленную связь OneToMany между сетью и вложением и другую двунаправленную связь OneToMany между участником и вложением.

Если они не подходят, объясните, пожалуйста, почему.

...