2012-10-23 82 views
4

我想映射一個複合鍵與多對一的關係。 Here is my SQL Server schema, with identity id fields.休眠映射多對一的複合鍵

下面是我的映射文件:

對於該機構登錄警報表:

<hibernate-mapping> 
<class name="AgencyLoginAlert" table="AGENCY_ALERTS"> 
    <id name="agencyAlertsGID" type="integer"> 
     <column name="AGENCY_ALERTS_GID" /> 
     <generator class="identity" /> 
    </id> 
    <property name="createdByName" type="string"> 
     <column name="CREATED_BY_NAME" length="30" /> 
    </property> 
    <property name="creationDatetime" type="date"> 
     <column name="CREATION_DATETIME" /> 
    </property> 
    <property name="lastUpdatedByName" type="string"> 
     <column name="LAST_UPDATED_BY_NAME" length="30" /> 
    </property> 
    <property name="lastUpdatedDatetime" type="date"> 
     <column name="LAST_UPDATED_DATETIME" /> 
    </property> 
    <property name="startDisplayDatetime" type="date"> 
     <column name="START_DISPLAY_DATETIME" /> 
    </property> 
    <property name="endDisplayDatetime" type="date"> 
     <column name="END_DISPLAY_DATETIME" /> 
    </property> 
    <property name="messageCategoryCode" type="string"> 
     <column name="MESSAGE_CATEGORY_CODE" length="6" /> 
    </property> 
    <property name="messageTitle" type="string"> 
     <column name="MESSAGE_TITLE" length="250" /> 
    </property> 
    <property name="messageStatusCode" type="string"> 
     <column name="MESSAGE_STATUS_CODE" length="10" /> 
    </property> 
    <property name="messageBodyText" type="string"> 
     <column name="MESSAGE_BODY_TEXT" length="2048" /> 
    </property> 

    <set name="agencyLoginAlertState" table="AGENCY_ALERT_STATE" inverse="true" lazy="true" fetch="select"> 
     <key> 
      <column name="AGENCY_ALERTS_GID" not-null="true" /> 
     </key> 
     <one-to-many class="AgencyLoginAlertState" /> 
    </set> 
</class> 

對於該機構登錄警報狀態表:

<hibernate-mapping> 
<class name="AgencyLoginAlertState" table="AGENCY_ALERTS"> 
    <composite-id> 
      <key-many-to-one name="agencyAlertsGID" class="AgencyLoginAlert"> 
       <column name="AGENCY_ALERTS_GID" /> 
      </key-many-to-one> 
      <key-property name="stateCode" type="string"> 
       <column name="STATE_CODE" length="2" /> 
     </key-property> 
    </composite-id> 
    <many-to-one name="agencyLoginAlert" class="AgencyLoginAlert" fetch="select" insert="false" update="false"> 
     <column name="AGENCY_ALERTS_GID" not-null="true" /> 
    </many-to-one> 
</class> 

我收到以下錯誤:

org.hibernate.MappingException: Foreign key (FK416A6411D6548611:AGENCY_ALERTS 
[AGENCY_ALERTS_GID])) must have same number of columns as the referenced primary key 
(AGENCY_ALERTS [AGENCY_ALERTS_GID,STATE_CODE]) 

有什麼建議?謝謝!

+0

您是否找到解決方案?我現在一直被困在同一件事上 – zach

回答

1

您的映射文件AgencyLoginAlertState引用了錯誤的表格。它說:

<class name="AgencyLoginAlertState" table="AGENCY_ALERTS"> 

由於兩個類都映射到同一個表,Hibernate的映射器正在衝突該表的主鍵的定義。根據您的數據庫架構,該行應該是:

<class name="AgencyLoginAlertState" table="AGENCY_ALERT_STATE">