2012-08-09 111 views
0

我有我要地圖一個相當簡單的(我認爲)類:映射一個映射到同一個表作爲它的類休眠

<class name="parent" table="PARENT_TABLE"> 
    <composite-id> 
     <key-property name = "a" column = "A"/> 
     <key-property name = "b" column = "B"/> 
     <key-property name = "c" column = "C"/> 
    </composite-id> 
    <map name = "theMap" table = "PARENT_TABLE" where="type='access'"> 
     <key foreign-key = "PARENT_TABLE_FK"> 
      <column name = "A"/> 
      <column name = "B"/> 
      <column name = "C"/> 
     </key> 
     <map-key column = "X" type = "double"/> 
     <element column = "Y" type = "double" not-null="true"/> 
    </map> 
</class> 

我得到了where="type='access'"伎倆從mapping multiple sets in one table in hibernate,但問題是在映射中,外鍵(A,B,C,X)沒有與父表(A,B,C)對齊。

有沒有人有任何想法如何得到這個快樂?如果必須單獨映射地圖,PARENT_TABLE將完全是多餘的。

+0

*不排隊*是什麼意思? A,B,C不是唯一的,而是每個X,Y組合都重複? – Firo 2012-08-14 06:18:28

+0

,因爲它希望父項的鍵匹配子項的鍵,由於它是一個映射並具有'X'的附加鍵列,所以不能這樣做。 ABC是爲每個子行重複的,這是正確的。我試圖做的是防止有ABC列的兩個表具有相同的數據。 – pennstatephil 2012-08-14 14:56:34

回答

0

它並不漂亮,也使得Schemaexport無用,但爲了使其工作,您需要指定where條件以使父項唯一,將insert/update設置爲false並讓地圖間接持久保留父項。

<class name="parent" table="PARENT_TABLE" where="x = (SELECT x FROM PARENT_TABLE p WHERE p.(a,b,c) = a,b,c LIMIT 1)" insert="false" update="false">