Hibernate: отображение нескольких родителей на детей - PullRequest
1 голос
/ 14 февраля 2012

У меня есть эти классы 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.

Я пробовал это отображение:

<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")

Пожалуйста, помогите мне с правильным отображением.

Спасибо

1 Ответ

0 голосов
/ 14 февраля 2012

здесь применимо любое отображение

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...