2010-01-22 2 views
3

У меня есть 2 таблицы отношений один к одному:спящий режим: внешний ключ является первичным ключом

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

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

я использую message_id в качестве первичного ключа scheduled_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, за столом: scheduled_message, для столбцов: [org.hibernate.mapping.Column (message_id)] ​​

помочь мне плз

благодаря

Quan

ответ

4

То, что вы здесь можно смотреть по-другому. Вместо того, чтобы иметь ScheduledMessage выставить объект Message, вы можете посмотреть, что ScheduledMessage является специализированным типом Message - другими словами, подкласс. Hibernate позволяет сопоставлять отношения наследования следующим образом несколькими способами - то, что вы здесь называете «таблицей для каждого подкласса». Если вы читаете section of the Hibernate documentation on this sort of mapping, он должен сделать все ясно и дать вам достаточный пример кода, чтобы вы могли работать.

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

+0

Я только прочитал раздел основного отношения отношения отношений, я прочитаю раздел наследования. спасибо – QuanNH

+0

для простого, я добавил поле id в таблице sched_message (уродливый), и он хорошо работает: |, спасибо – QuanNH