2012-03-15 157 views
0

我的web應用程序域由三個實體:哪種策略對Hibernate繼承

  • ,它代表的人類個體,與所有的個人數據,如姓名,電話號碼等。
  • 客戶供應商:'人'的孩子。他們每個人都有特定的屬性。

現在我想使用Hibernate(與註釋)爲我的模型客戶供應商表映射到關係數據庫架構。我不想要一個通用的Person表,我不需要它。

我想要一個名稱,姓氏,... +特定客戶字段的客戶表和名稱,姓氏...... +特定供應商字段的供應商表。

你認爲這很愚蠢嗎?什麼是更好的解決方案呢?而如何實現呢

+0

閱讀文檔如何?參見http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e7287和http://docs.jboss.org/hibernate/core/3.6/reference/en-US/ html_single /#mapping-declaration-unionsubclass – 2012-03-15 13:29:42

回答

2

不,它不是愚蠢的,它在Hibernate中直接支持,請參閱:9.1.5. Table per concrete class

<class name="Person"> 
    <id name="id" type="long" column="PERSON_ID"> 
     <generator class="sequence"/> 
    </id> 
    ... 
    <union-subclass name="Customer" table="CUSTOMER"> 
     ... 
    </union-subclass> 
    <union-subclass name="Supplier" table="SUPPLIER"> 
     ... 
    </union-subclass> 
</class> 

在JPA與註釋,你可以寫:

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public abstract class Person { 
    ... 
} 

@Entity 
public class Customer extends Person { 
    ... 
} 

@Entity 
public class Supplier extends Person { 
    ... 
} 

如果您不需要進行跨繼承查詢:「給我所有的人以名爲‘Smith’,無論無論他們是客戶還是供應商「,這個策略相當不錯。

+0

1)是否會創建一個PERSON表? – 2012-03-15 13:29:52

+1

@FabioB:不,它不符合你的要求。 – 2012-03-15 13:31:27