2012-02-14 143 views
1

我有這些Java類:休眠:多家長對孩子映射

Class Table1 
{ Integer id; 
    Set<Error> errors; 
} 
Class Table2 
{ Integer id; 
    Set<Error> errors; 
} 
Class Table3 
{ Integer id; 
    Set<Error> errors; 
} 

Class Error 
{ 
    Integer id; 
    Integer tableId; // Pk of parent id 
    String tableName; 
    String errorMessage 
} 

如何最好地在休眠它們映射。

我想這個映射:

<hibernate-mapping> 
<class name="Table1" table="TABLE1" schema="xxx" catalog="XXXXX"> 
    <id name="id" type="integer"> 
     <column name="ID" /> 
     <generator class="native" /> 
    </id> 
    <version column="MODIFIED_DATE" name="modifiedDate" 
       type="timestamp" unsaved-value="null"/> 
    <set name="Errors" table="ERROR" fetch="join" 
      lazy="false" cascade="all-delete-orphan" where="TABLE_NAME='table1'"> 
     <key column ="TABLE_ID" not-null="true" /> 
     <one-to-many class="Error" /> 
    </set> 

</class> 

對於孩子:

<hibernate-mapping> 
<class name="Error" table="ERROR" schema="XXX" catalog="xxxxx"> 
    <id name="id" type="integer"> 
     <column name="ID" /> 
     <generator class="native" /> 
    </id> 
    <version column="MODIFIED_DATE" name="modifiedDate" type="timestamp" unsaved-value="null"/> 
    <property name="tableId" type="integer" insert="false" update="false" > 
     <column name="TABLE_ID" not-null="true" /> 
    </property> 
    <property name="tableName" type="string"> 
     <column name="TABLE_NAME" not-null="true" length="20" /> 
    </property> 
    <property name="errorMessage" type="string"> 
     <column name="ERROR_MESSAGE" length="100" /> 
    </property> 
</class> 

這工作得很好,如果我有隻表1,當我添加相同的映射對於表2, 我收到此錯誤:

org.hibernate.MappingException: Repeated column in mapping for entity: Error column: 
     TABLE_ID (should be mapped with insert="false" update="false") 

請幫助我正確的映射。

感謝

+0

可以告訴你,讓你的錯誤 – frictionlesspulley 2012-02-14 04:15:09

+0

我得到這個錯誤時,我有表2相同表1,剛剛更換table1的映射中的映射與table2。謝謝。 – Akhil 2012-02-14 04:44:10

回答

0

任何映射將適用此

Class Table1 implements HasErrors 
{ Integer id; 
    Set<Error> errors; 
} 
Class Table2 implements HasErrors 
{ Integer id; 
    Set<Error> errors; 
} 
Class Table3 implements HasErrors 
{ Integer id; 
    Set<Error> errors; 
} 

Class Error 
{ 
    Integer id; 
    HasErrors parent; 
    String errorMessage 
} 

    Integer tableId; // Pk of parent id 
    String tableName; 

<class name="Error" table="ERROR" schema="XXX" catalog="xxxxx"> 
    ... 
    <any name="parent" id-type="integer" meta-type="String"> 
     <meta-value value="Table1" class="Table1"/> 
     <meta-value value="Table2" class="Table2"/> 
     <column name="TABLE_NAME"/> 
     <column name="TABLE_ID"/> 
    </any>  
    <property name="errorMessage" type="string"> 
     <column name="ERROR_MESSAGE" length="100" /> 
    </property> 
</class> 

<class name="Table1" table="TABLE1" schema="xxx" catalog="XXXXX"> 
    ... 
    <set name="errors" table="ERROR" lazy="false" cascade="all-delete-orphan" where="TABLE_NAME='table1'"> 
     <key column ="TABLE_ID" not-null="true" /> 
     <many-to-any id-type="integer" meta-type="String"> 
     <meta-value value="Table1" class="Table1"/> 
     <meta-value value="Table2" class="Table2"/> 
     <column name="TABLE_NAME" not-null="true"/> 
     <column name="TABLE_ID" not-null="true"/> 
     </many-to-any> 
    </set> 
</class> 
+0

嗨Firo,謝謝你的回覆。我試過這個映射,但我得到這個錯誤:org.hibernate.MappingException:無法解釋元值。你能否詳細說明或指出一些文件的使用?界面有什麼方法?我試圖用一個鑑別器「表名」在一個錯誤表中存儲來自不同表(7)的錯誤。謝謝。 – Akhil 2012-02-14 22:36:23

+0

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/mapping.html#mapping-types-anymapping – Firo 2012-02-15 06:41:02

+0

嗨Firo,感謝您的鏈接。我得不到多少幫助。我仍然無法弄清楚Child表映射中的錯誤:rg.hibernate.MappingException:無法解釋元值。你能指點我正確的方向嗎?謝謝。 – Akhil 2012-02-16 18:37:56