我有两个基本抽象类,并且有多个从这两个派生的附加类,添加附加属性等。
这些特定的派生类型之间存在关系。
一个简单的说明示例:
Role
和Group
类是abstract
,但它们没有标记为@MappedSuperclass
。
InheritanceType.JOINED
正在使用策略,因此表Role
(对于抽象类)和AdminRole
(对于派生类)都应该存在(它们都将具有相同的RoleID
)。
DiscussionGroup
有一个AdminRole
属性, aSet<DiscussantRole>
, aSet<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 自动为关系创建外键,这对我们来说非常好。
如果我指示它使用相同的映射表进行连接(对于多对多、多对多和一对一),它也会尝试创建外键。当然不可能同时在 from to 上创建外键,RoleID
所以Role_Group
我得到一个错误。AdminRole
DiscussantRole
有什么办法,如何指示Hibernate
生成没有外键的选定关系
或者
定义关系应该基于抽象祖先(即 DiscussionGroup 及其 Set 应该映射为 1:N - Group and Set)?