2010-01-22 287 views
3

我有2個表關係一對之一:休眠:外鍵是主鍵

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

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

我使用MESSAGE_IDscheduled_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,at table:scheduled_message,for columns:[org.hibernate.mapping.Column(message_id)]

help me plz

感謝

回答

4

你在這裏可以用不同的方式來看待什麼。 ScheduledMessage不是讓ScheduledMessage公開Message屬性,您可以看看ScheduledMessageMessage的一種特殊類型 - 換句話說就是一個子類。 Hibernate允許你以許多方式映射這樣的繼承關係 - 你在這裏稱爲「每個子類的表」。如果你閱讀section of the Hibernate documentation on this sort of mapping,它應該讓一切都清楚,給你足夠的示例代碼來啓動和運行。

或者,要堅持使用您當前的方法,您可以將ScheduledMessage的ID映射爲composite id,但僅包含單個組件。

+0

我只讀關係基本映射部分,我會讀繼承部分。感謝 – QuanNH 2010-01-22 10:18:21

+0

爲簡單,我在scheduled_message表(醜陋),添加id字段,它工作得很好:|,謝謝 – QuanNH 2010-01-23 03:53:15