2010-11-09 48 views
0

我有一個大腦痙攣試圖找出這個映射。Hibernate與自動錶格多對一的連接表映射

這裏是我的分貝:

CUSTOMER    CUSTOMERFAMILY    CUSTOMER 
PK SITE_ID -----------PRIMARYSITE_ID    -- PK SITE_ID 
         MEMBERSITE_ID -------------| 

這將創建一個關係,其中一個客戶只能有一個父(因爲有上CUSTOMERFAMILY.MEMBERSITE_ID獨特的約束)和一個客戶可以有許多兒童。 (即百事公司擁有FritoLay,佳得樂等,所以百事可樂有幾個孩子,但佳得樂只有一個母公司:百事公司)。

我試圖映射稱爲父在我的客戶對象的屬性,我已經試過這種想法的許多組合沒有成功:

<join table="CUSTOMERFAMILY" inverse="false"> 
    <key column="MEMBERSITE_ID" unique="true" /> 
    <many-to-one name="parent" column="SITE_ID" not-null="true"><formula>PRIMARYSITE_ID</formula></many-to-one> 
</join> 

任何想法?

在此先感謝。

(請不要問爲什麼數據庫設計這種方式...原有系統,那不是我!;))

回答

2

假設你有

private Customer parent; 
private Set<Customer> children; 

映射看起來像這個:

<set name = "children" table = "CUSTOMERFAMILY">    
    <key column="PRIMARYSITE_ID" /> 
    <many-to-many column = "MEMBERSITE_ID" entity-name="package.Customer" /> 
</set> 

<join table="CUSTOMERFAMILY" inverse="true"> 
    <key column="MEMBERSITE_ID" /> 
    <many-to-one name="parent" column = "PRIMARYSITE_ID" /> 
</join> 
+0

非常好!謝謝!這工作,現在,如果我想使用命名查詢來加載客戶,我得到一個錯誤PRIMARYSITE_ID:無效標識符 – 2010-11-10 21:56:59