У меня есть два базовых абстрактных класса, и есть несколько дополнительных классов, производных от этих двух, добавляющих дополнительные атрибуты и т. д.
Между этими конкретными производными типами существуют отношения.
Простой иллюстрирующий пример:
Классы Role
и Group
относятся к классам abstract
, но не помечены как @MappedSuperclass
.
Используется стратегия InheritanceType.JOINED
, поэтому должны существовать обе таблицы Role
(для абстрактного класса) и AdminRole
(для производного класса) (они обе будут иметь одинаковые RoleID
).
DiscussionGroup
имеет одно свойствоAdminRole
,Set<DiscussantRole>
,Set<ManagerRole>
WorkingGroup
естьSet<WorkerRole>
,Set<ManagerRole>
Role |-- AdminRole |-- DiscussantRole |-- ManagerRole |-- WorkerRole Group |-- DiscussionGroup |-- WorkingGroup
Поскольку количество производных классов может расти, и поскольку классы, производные от роли, могут иметь отношения к другим классам, производным от группы (и наоборот), это может привести к большому количеству различных таблиц сопоставления (Worker_DiscussionGroup, Worker_WorkingGroup) или множеству столбцов внешнего ключа. (в отношениях M:1 — например, роль ManagerRole должна иметь DiscussionGroupID и WorkingGroupId). Я хочу сопоставить все эти отношения с помощью одной общей таблицы сопоставления.
Role_Group (RoleID, GroupId)
Мы используем Hibernate для создания схемы DDL (hbm2ddl.auto=create) во время текущей разработки (мы будем использовать определение статической схемы для дальнейшего использования в рабочей среде). Hibernate автоматически создает внешние ключи для отношений, и это очень хорошо для нас.
Если я укажу ему использовать одно и то же сопоставление таблицы для соединений (многие ко многим, многие ко многим, а также один к одному), он попытается создать внешние ключи сильный> тоже. И, конечно же, невозможно создать внешний ключ на RoleID
от Role_Group
до AdminRole
и DiscussantRole
одновременно, поэтому я получаю сообщение об ошибке.
Есть ли способ настроить Hibernate
для создания выбранных отношений без внешних ключей
or
определить, что отношение должно быть основано на абстрактных предках (т. е. группа обсуждения и ее набор должны отображаться как 1:N — группа и набор)?