私には2つの基本抽象クラスがあり、これら2つから派生した複数の追加クラスがあり、追加の属性などを追加しています.
これらの特定の派生型の間には関係があります。
簡単な説明の例:
Role
およびGroup
クラスはabstract
ですが、 としてマークされていません@MappedSuperclass
。
InheritanceType.JOINED
戦略が使用されているため、Role
(抽象クラス用) とAdminRole
(派生クラス用) の両方のテーブルが存在する必要があります (どちらも同じになりますRoleID
)。
DiscussionGroup
a 、 aという1 つの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 が必要です)。これらすべての関係を 1 つの共通のマッピング テーブルにマッピングしたいと考えています。
Role_Group (RoleID, GroupId)
現在の開発中に Hibernateを使用して DDL スキーマ (hbm2ddl.auto=create) を生成します (後で本番環境で使用するために静的スキーマ定義を使用します)。Hibernate はリレーションの外部キーを自動的に作成します。これは私たちにとって非常に良いことです。
結合にテーブルの同じマッピングを使用するように指示すると (多対多、多対多、および 1 対 1 にも)、外部キーも作成しようとします。もちろん、to と to で同時に外部キーを作成することはできないRoleID
ためRole_Group
、AdminRole
エラーDiscussantRole
が発生します。
Hibernateに指示する方法はありますか
外部キーなしで選択された関係を生成する
また
関係が抽象的な祖先に基づく必要があることを定義するには (つまり、ディスカッショングループとそのセットは 1:N - グループとセットとしてマッピングする必要があります)?