2009-06-05 28 views
1

我想使用hibernate來包含對象的層次結構,但鑑別器列是另一個包含定義子類類型的CODE的表的外鍵。Hibernate Table per Hierarchy如何

是否可以指定連接表中的代碼作爲鑑別符,還是必須使用鍵值並希望鍵保持一致?

例如鑑別器=「方形」v.s.鑑別= 「0 | 1」

表:形狀

area=25 shape_type_fk=0 
area=10 shape_type_fk=1 

表:shape_types

ID CODE 
0 square 
1 circle 

回答

1

快速測試顯示,你可以這樣做:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping default-access="field"> 

    <class name="Shape" abstract="true"> 
    <id name="id"/> 
    <discriminator formula="select CODE from SHAPE_TYPES st where st.ID=SHAPE_TYPE"/> 
    <version name="version"/> 

    <subclass name="Square" discriminator-value="square"/> 
    <subclass name="Circle" discriminator-value="circle"/> 

    </class> 
</hibernate-mapping> 

現在,這個映射不會創建一個公式中引用它也沒有在SHAPE_TYPE列添加到SHAPESHARE_TYPE表。您可以在import.sql文件中執行此操作,Hibernate會從類路徑中自動讀取或通過將另一個類映射到此表中。

+0

Maarten的示例工作正常,但需要在鑑別器公式的旁邊,並且子選擇中的列必須引用別名表。另外,對子類使用標準會導致相關的子查詢,這是非常低效的。我想我必須生活在沒有多態(表)的層次結構中。 – gbegley 2009-06-09 19:13:13

-1

看起來你需要使用連接子類,而不是子類。詳情是here

相關問題