4

我正在尝试映射具有多对一关系的复合键。 这是我的 SQL Server 架构,带有标识 ID 字段。

以下是我的映射文件:

对于机构登录警报表:

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

有什么建议么?谢谢!

4

1 回答 1

1

您的映射文件AgencyLoginAlertState引用了错误的表。它说:

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

由于两个类都映射到同一个表,Hibernate 的映射器在该表的主键定义上发生冲突。根据您的数据库架构,该行应该是:

<class name="AgencyLoginAlertState" table="AGENCY_ALERT_STATE">
于 2013-04-30T14:02:55.643 回答