У меня есть два базовых абстрактных класса , и есть несколько дополнительных классов, производных от этих двух, добавление дополнительных атрибутов и т. Д.
Существуют отношения между этими конкретными производными типами.
Простой иллюстрирующий пример:
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
Поскольку число производных классов может увеличиваться и поскольку классы, производные от Role, могут иметь отношения к различным классам, производным от Group (и наоборот), это приведет к большому количеству различных таблиц сопоставления (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
для генерации выбранных отношений без внешних ключей
или
, чтобы определить, что отношение должно основываться на абстрактном
предки (т. е. группа обсуждения и ее набор должны
отображаться как 1: N - группа и набор)?