2013-04-08 57 views
0

我有以下情形 -使用JPA表每个子类继承一个一对多的关系

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 
) 

的运动有哪些可以一起作为自己的实体进行分组许多详细信息,说campaign_price, campaign_deal,campaign_contact,campaign_retailers等(共有9个)。 这些组具有campaign_detail表中的一些公共属性。

我想在campaign_detail及其所有子表中使用table-per-subclass继承。

但是我有一个问题,我不知道如何处理。 大多数子表格与campaign_detail表格通过一对一的关系相关联。到现在为止还挺好。但有些(9个中的3个)与campaign_detail通过多对一关系相关。例如,一个campaign_detail可能需要多个交易或多个零售商。

那么如何使用table-per-subclass继承JPA注释来为这些类建模。到目前为止,我所看到的所有例子都只考虑了1对1的关系。

我正在使用hibernate 4.1.4 Final。

感谢您的帮助。

回答

0

你不能。继承是用来建模是一个的关系:汽车是一个车辆。香蕉水果。

因此,如果您有一个广告系列详细信息和多笔交易,这种关系就没有意义。这是一个构图关系,其中一个广告系列详细信息几笔交易。

+0

感谢您的帮助。从纯粹的对象的角度来看,我不明白为什么这不应该成为可能 - 可能是我错过了一些东西。让我以你为榜样 - 香蕉是一种水果,苹果也是。现在让我们假设一袋水果只能包含一个苹果,但可以包含任意数量的香蕉。在那种情况下,是的,我有多个香蕉,但每个香蕉仍然是一个水果,不是。当我处理水果袋时,我仍然希望在某些情况下处理它的内容,如“水果”,以及其他内容中的“香蕉”。无法在JPA中映射它可能是实施的限制吗? – Anupama 2013-04-09 03:52:10

+0

如果我们拿你的比喻,你问的是如何制作FruitBasket的香蕉和苹果子类。这没有意义。当然,您可以为campaign_price,campaign_deal,campaign_contact等定义基础实体。但是,此基础实体不得为CampaignDetail。也许我不明白你在问什么。如果是这样,请澄清。 – 2013-04-09 06:50:52

+0

不完全,不FruitBasket的子类,但水果。如果我要制作“一串香蕉”或“葡萄串”子类,我认为更合适的比喻。所以是的,我意识到我所要求的是不可能的。虽然在DB /查询语义会起作用,但对象继承将不起作用。感谢您帮助我看到问题。 – Anupama 2013-04-23 04:22:01

相关问题