Hibernate 使用带有一对多关系的每个子类继承的JPA表

Hibernate 使用带有一对多关系的每个子类继承的JPA表,hibernate,inheritance,jpa,one-to-many,Hibernate,Inheritance,Jpa,One To Many,我有下面的场景- Table campaign_detail ( campaign_detail_id (PK), campaign_detail_caption, campaign_detail_description, campaign_detail_type (DISCRIMINATOR) ) Table campaign_price_detail ( campaign_detail_id (PK) REFERENCES (campaign_det

我有下面的场景-

Table campaign_detail (
    campaign_detail_id (PK),
    campaign_detail_caption,
    campaign_detail_description,
    campaign_detail_type (DISCRIMINATOR)
)

Table campaign_price_detail (
    campaign_detail_id (PK) REFERENCES (campaign_detail), // ONE_TO_ONE with campaign_detail
    campaign_price_amount,
    campaign_price_URL
)

Table campaign_deal_detail (
    deal_id (PK)
    campaign_detail_id REFERENCES (campaign_detail), // MAN_TO_ONE with campaign_detail
    campaign_deal_code,
    campaign_deal_period
)
该活动有许多详细信息,这些信息可以单独分组为实体,如活动价格、活动交易、活动联系人、活动零售商等(共有9个)。 这些组具有一些常见属性,这些属性位于“活动详细信息”表中

我想使用带有campaign_detail的每个子类继承表及其所有子表

然而,我有一个问题,我不知道如何处理。 大多数子表都通过与活动详情表的一对一关系进行关联。到现在为止,一直都还不错。但有些(9个中的3个)与活动细节有多对一的关系。例如,一个营销活动的详细信息可能涉及多个交易或多个零售商

那么,我如何使用表每子类继承JPA注释来建模这些类呢。到目前为止,我所看到的所有例子都只考虑了1对1的关系。 我使用的是Hibernate4.1.4Final


谢谢你的帮助。

你不能。继承用于为一种关系建模:一辆车就是一辆车。香蕉是一种水果


因此,如果你有一个活动细节和几笔交易,这种关系就没有意义。这是一种组合关系,其中一个活动细节有多个交易。

感谢您的帮助。从纯对象的角度来看,我不明白为什么这不可能——可能是我遗漏了什么。让我举个例子——香蕉是水果,苹果也是。现在让我们假设一袋水果只能包含一个苹果,但可以包含任意数量的香蕉。在这种情况下,是的,我有多个香蕉,但每个香蕉仍然是一个水果,不是吗。当我处理水果袋时,我仍然希望在某些上下文中将其内容处理为“水果”,在另一些上下文中处理为“香蕉”。无法在JPA中映射它可能是实现的一个限制?如果我们用你的类比,你会问如何制作果篮的香蕉和苹果子类。这毫无意义。当然,您可以为campaign_price、campaign_deal、campaign_contact等定义基本实体。但此基本实体不能是CampaignDetail。也许我不明白你在问什么。如果是,请澄清。不确切,不是果篮的子类,而是水果。我认为,如果我把水果分为“一串香蕉”或“一串葡萄”两个亚类,那将是一个更合适的类比。所以是的,我意识到我所要求的是不可能的。在DB/查询语义可以工作的情况下,对象继承不起作用。感谢您帮助我了解这个问题。为了增加讨论内容,解决方案是使用一个中间表来处理继承,即一个用于一堆水果的表。此表对象将继承自水果,是香蕉或葡萄的组合(每个对象需要一个表)。这在JPA中不是一个限制,您正试图强制执行一个额外的逻辑约束,因此您需要更多的抽象层。