我的web應用程序域由三個實體:哪種策略對Hibernate繼承
- 人,它代表的人類個體,與所有的個人數據,如姓名,電話號碼等。
- 客戶和供應商:'人'的孩子。他們每個人都有特定的屬性。
現在我想使用Hibernate(與註釋)爲我的模型客戶和供應商表映射到關係數據庫架構。我不想要一個通用的Person表,我不需要它。
我想要一個名稱,姓氏,... +特定客戶字段的客戶表和名稱,姓氏...... +特定供應商字段的供應商表。
你認爲這很愚蠢嗎?什麼是更好的解決方案呢?而如何實現呢?
我的web應用程序域由三個實體:哪種策略對Hibernate繼承
現在我想使用Hibernate(與註釋)爲我的模型客戶和供應商表映射到關係數據庫架構。我不想要一個通用的Person表,我不需要它。
我想要一個名稱,姓氏,... +特定客戶字段的客戶表和名稱,姓氏...... +特定供應商字段的供應商表。
你認爲這很愚蠢嗎?什麼是更好的解決方案呢?而如何實現呢?
不,它不是愚蠢的,它在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’,無論無論他們是客戶還是供應商「,這個策略相當不錯。
1)是否會創建一個PERSON表? – 2012-03-15 13:29:52
@FabioB:不,它不符合你的要求。 – 2012-03-15 13:31:27
閱讀文檔如何?參見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