Hibernate отображает много-один составной ключ

Я пытаюсь отобразить сложный ключ со многими отношениями. Вот моя схема SQL Server с полями идентификационных данных.

Ниже приведены файлы сопоставления:

В таблице оповещений агентства:

<hibernate-mapping>
<class name="AgencyLoginAlert" table="AGENCY_ALERTS">
 <id name="agencyAlertsGID" type="integer">
 <column name="AGENCY_ALERTS_GID">
 <generator>
 </generator></column></id>
 <property name="createdByName" type="string">
 <column name="CREATED_BY_NAME" length="30">
 </column></property>
 <property name="creationDatetime" type="date">
 <column name="CREATION_DATETIME">
 </column></property>
 <property name="lastUpdatedByName" type="string">
 <column name="LAST_UPDATED_BY_NAME" length="30">
 </column></property>
 <property name="lastUpdatedDatetime" type="date">
 <column name="LAST_UPDATED_DATETIME">
 </column></property>
 <property name="startDisplayDatetime" type="date">
 <column name="START_DISPLAY_DATETIME">
 </column></property>
 <property name="endDisplayDatetime" type="date">
 <column name="END_DISPLAY_DATETIME">
 </column></property>
 <property name="messageCategoryCode" type="string">
 <column name="MESSAGE_CATEGORY_CODE" length="6">
 </column></property>
 <property name="messageTitle" type="string">
 <column name="MESSAGE_TITLE" length="250">
 </column></property>
 <property name="messageStatusCode" type="string">
 <column name="MESSAGE_STATUS_CODE" length="10">
 </column></property>
 <property name="messageBodyText" type="string">
 <column name="MESSAGE_BODY_TEXT" length="2048">
 </column></property>
 <set name="agencyLoginAlertState" table="AGENCY_ALERT_STATE" inverse="true" lazy="true" fetch="select">
 <key>
 <column name="AGENCY_ALERTS_GID" not-null="true">
 </column></key>
 <one-to-many>
 </one-to-many></set>
</class>
</hibernate-mapping>

Для таблицы состояния оповещений агентства:

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

Я получаю следующую ошибку:

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

Любые предложения? Спасибо!

1 ответ

Ваш файл сопоставления для AgencyLoginAlertState ссылается на неверную таблицу. В нем говорится:

Поскольку оба класса получают сопоставление с одной и той же таблицей, Hibernate mapper сталкивается с определением первичного ключа для этой таблицы. Основываясь на вашей схеме базы данных, эта строка должна быть:

licensed under cc by-sa 3.0 with attribution.