2012-02-14 18 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> 

私は同じマッピングを追加すると、私は、唯一のTABLE1を持っている場合、これが正常に動作しますtable2の場合 このエラーが発生します:

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

正しいマッピングをお手伝いください。

おかげ

+0

適用可能であるあなたは、私はちょうどTABLE1を交換し、TABLE1と同じtable2のためのマッピングを持っている場合、あなたにエラー – frictionlesspulley

+0

を与えるマッピングが、私はこのエラーを取得し表示することができますtable2で。ありがとう。 – Akhil

答えて

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

+0

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

+0

こんにちはフィロ、そのリンクをありがとう。私は多くの助けを得ることができませんでした。私はまだ子テーブルマッピングのエラーを理解できませんでした:rg.hibernate.MappingException:メタ値を解釈できませんでした。私を正しい方向に向けることができますか?感謝します。 – Akhil