2010-01-22 211 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