2009-11-25 46 views
2

我們必須爲只讀目的的lecagy數據庫中包含以下結構:Hibernate映射條件多到一

Table MAIN: 
id productId productType 

Table PRODUCT_A: 
id description_a 

Table PRODUCT_B: 
id description_b 

Table PRODUCT_C: 
id description_c 

根據在列productTyp價值,產品ID是指無論對PRODUCT_A,PRODUCT_B或PRODUCT_C。

對於每個表我創建一個Java實體。 Main類包含每個產品的一個集合。

產品與主類不是'是'的關係。在其他情況下作爲獨立實體使用。

有什麼辦法可以用hbm.xml文件來映射這個嗎?

+0

爲什麼.hbm.xml?你不能使用註釋嗎? – Bozho 2009-11-25 14:45:46

+0

沒有。但它不應該有任何區別 – bertolami 2009-11-25 14:59:01

回答

2

映射正確的方法是通過<any>

<class name="Main" table="MAIN"> 
    ... 
    <any name="product" id-type="long" meta-type="string"> 
    <meta-value value="PRODUCT_A" class="ProductA"/> 
    <meta-value value="PRODUCT_B" class="ProductB"/> 
    <meta-value value="PRODUCT_C" class="ProductC"/> 
    <column name="productType"/> 
    <column name="productId"/> 
    </any> 
</class> 

你必須適當ProductA等..類映射到相應的表(也許你已經有了)。

3

看起來你正在尋找使用每個子類策略使用鑑別器的表繼承。在Java中,每個PRODUCT_X類應該擴展Main類。 This page解釋了實施該策略的細節。

+0

在我看來,我也可以使用繼承,但產品類遠沒有與主 – bertolami 2009-11-25 14:17:07

+0

有'是'關係請記住,您在這裏沒有進行OO設計,而是您找到映射現有表格的最有效方法。如果你有重新設計表結構的奢望,那麼我會關心繼承是否是最好的解決方案。但既然如此,情況並非如此。不幸的是,爲了完成工作,我們必須妥協一點。 – 2009-11-25 14:23:41

+0

同意。但由於還有很多其他表格,我仍然猶豫不決。 – bertolami 2009-11-25 14:59:39