0

使用 Hibernate,我试图在一个固定域类型 A 和另一个域类型 B 之间实现一对一的关系,后者的类型是实现某个接口的任何类型。

情况:

该系统具有三种不同的域类型;Country、Warehouse 和 Store,它们实现了一个接口 FlagSubscriber。

我想通过 Flags 加入 FlagSubscribers。每个标志可以与 0 或 1 个标志订阅者配对。

执行:

在数据库中,我有 Country、Warehouse、Store 和 Flag 的表,每个表都有一个 ID 列和用于其特定属性的各种其他列。为了将 Flags 与 FlagSubscribers 配对,我创建了一个链接表,如下所示:

  • flag_id
  • 订阅者 ID
  • 订阅者类型

id 字段是不言自明的,subscriber_type 是一个文本字段,用于确定subscriber_id 是否与国家、仓库或商店相关。

问题:

使用 Hibernate 注解,我如何告诉 Hibernate 如何在 Flag 类中映射 FlagSubscribers?

我认为我需要使用鉴别器,但我不确定如何针对我的特定情况执行此操作,或者即使可能。

任何指向示例、建议或想法的指针都将受到欢迎!

4

2 回答 2

1

也许它可以使用@Anyannotation进行映射,尽管我不确定它如何与链接表一起使用。Flag但是,由于和之间的关系FlagSubscriber是一对一的,因此您可以在没有链接表的情况下对其进行映射。

EntityManager另请注意,如果通过接口使用 Hibernate,则自 Hibernate 3.5 起它将不起作用。

于 2011-04-21T11:00:15.223 回答
0

我会去另一个设置:

没有接口 FlagSubscriber,而是一个具有 3 个子类的(抽象)类:Store、Warehouse 和 Country。所有常见字段都可以移动到 FlagSubscriber 但我认为这可能仅限于

@ManyToOne 私有标志标志;

然后,您可以选择拥有一个单独的表 FlagSubscriber,其中将包含subscriber_id 和表标志的外键。FlagSubscriber 的每个子类也将拥有自己的具有相同 id 的表。那么不需要鉴别器,因为hibernate将加入所有子类以知道它实际上是哪种类型(子类)(在id上它只能成功。

于 2011-04-21T11:04:39.547 回答