Hibernate: внешний ключ является первичным ключом - PullRequest
3 голосов
/ 22 января 2010

У меня есть 2 таблицы отношения один к одному:

**message**(id, name, content)

**scheduled_message**(message_id, start_time, stop_time)

я использую message_id в качестве первичного ключа schedule_message таблицы.

мой класс домена:

public class Message {

    private Integer id;
    private String name;
    private String content;
    ...
}

public class ScheduledMessage {
 private Message message;
 private Date startTime;
 private Date stopTime;
}

я пытаюсь записать конфигурацию hibernate xml для сопоставления 2 классов, но ошибка в message_id: (

<class name="Message" table="message">
  <id name="id" column="id">
   <generator class="native" />
  </id>
  <property name="name" column="name" />
  <property name="content" column="content" />
 </class>

<class name="ScheduledMessage" table="scheduled_message">
  <id name="message" column="message_id">
   <generator class="foreign">
    <param name="property">message</param>
   </generator>
  </id>
  <property name="startTime" column="start_time" />
  <property name="stopTime" column="stop_time" />
  <one-to-one name="message" constrained="true"/>
 </class>

ошибка: не удалось определить тип для: cbs.domain.Message, для таблицы: schedule_message, для столбцов: [org.hibernate.mapping.Column (message_id)] ​​* ​​1016 *

помогите мне, плз

спасибо

Quan

1 Ответ

4 голосов
/ 22 января 2010

То, что у вас здесь есть, можно посмотреть по-другому. Вместо того, чтобы ScheduledMessage выставлять свойство Message, вы можете посмотреть, что ScheduledMessage является специализированным типом Message - другими словами, подклассом. Hibernate позволяет отображать отношения наследования таким образом несколькими способами - то, что у вас здесь называется, «таблица на подкласс». Если вы прочтете раздел документации Hibernate о таком типе сопоставления , это должно прояснить все и дать вам достаточно кода для примера, чтобы вы могли начать работу.

В качестве альтернативы, чтобы придерживаться вашего текущего подхода, вы можете сопоставить идентификатор ScheduledMessage как составной идентификатор , но только с одним компонентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...