使用Hibernate,我试图在一个固定域类型A和另一个域类型B之间实现一对一的关系,其类型是实现某个接口的任何类型。
情况:
系统有三种不同的域类型; Country,Warehouse和Store,它们实现了FlagSubscriber接口。
我想加入FlagSubscribers with Flags。每个Flag可以与0或1个FlagSubscriber配对。
实施
在数据库中,我有Country,Warehouse,Store和Flag的表,每个表都有一个ID列和各种其他列的特定属性。为了将Flags与FlagSubscribers配对,我创建了一个链接表,如下所示:
id字段不言自明,subscriber_type是一个文本字段,用于确定subscriber_id是否与国家,仓库或商店相关。
问题:
使用Hibernate注释,如何告诉Hibernate如何在Flag类中映射FlagSubscribers?
我认为我需要使用鉴别器,但我不确定如何针对我的具体情况做这件事,或者即使有可能。
欢迎任何关于示例,建议或想法的指示!
答案 0 :(得分:1)
也许它可以使用@Any
annotation进行映射,但我不确定如何使用链接表。但是,由于Flag
和FlagSubscriber
之间的关系是一对一的,因此您可以在没有链接表的情况下对其进行映射。
另请注意,如果通过EntityManager
接口使用Hibernate,则自Hibernate 3.5起无效。
答案 1 :(得分:0)
我会去另一个设置:
没有接口FlagSubscriber而是一个带有3个子类的(抽象)类:Store,Warehouse和Country。可以将所有公共字段移动到FlagSubscriber,但我认为这可能仅限于
@ManyToOne 私人国旗;
然后,您可以选择使用单独的表FlagSubscriber,它将包含subscriber_id和表标志的外键。 FlagSubscriber的每个子类也有自己的具有相同id的表。不需要鉴别器,因为hibernate将与所有子类连接以了解它实际上是哪种类型(子类)(在id上它只能成功。