2012-06-08 27 views
0

我有幾個班在我的應用程序:Hibernate的一個一對多的關聯,在很多部分業主的類型

  1. 個人,映射到單個表
  2. 公司,映射本公司表
  3. 地址,映射到地址表

我要建立在對可能的關聯個人之間地址,也公司和之間地址,因爲自然的個人和企業可以擁有零個或多個地址。 我也希望使用地址表中的相同列來表示DB中的這種關聯 - 一列指所有者實體的ID,另一列指示其類型。因此,在SQL我會做這樣的事情與ID 5提取單個的地址:

select * from Address where ref_id = 5 and ref_type = 'Individual' 

對於那些想知道爲什麼我這樣做,我的動機是雙重的:

  1. 合併表/列使用類似的數據。
  2. 使用更通用的架構來提供域模型的未來擴展而不需要DDL。

所以問題是:我如何在Hibernate中定義這種關聯?我是Hibernate的新成員,經過幾個小時的努力,我找不到辦法做到這一點。

謝謝。

+1

見where子句http://stackoverflow.com/questions/217831/how-to-use -hibernate-any-related-annotations – axtavt

+0

謝謝,這很有幫助。但是,如果我理解正確,這將允許我與相關聯的對象(個人或公司)獲取地址。如果我想使用關聯地址獲取個人信息,該怎麼辦? – Stas

回答

0

使用XML:

<set name="adresses" where="ref_type = 'Individual'"> 
    ... 
</set> 

AFAIK有一個休眠批註指定的集合屬性

+0

這將在SQL中起作用,但只要在Individual和Company類上配置「addresses」集合,Hibernate就會在同一列的Address表中創建兩個唯一的外鍵。這稍後阻止我插入來自地址的引用,因爲它們本質上不是唯一的(只有類型/ ID對是唯一的)。 – Stas

+0

你確定hibernate會做到這一點,雖然sdpecifying the where子句?如果是,則添加foreignkey =「無」 – Firo

相關問題