hibernate:外键是主键

时间:2010-01-22 10:08:25

标签: hibernate

我有一对一的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 config来映射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)]

帮我plz

感谢

1 个答案:

答案 0 :(得分:4)

你在这里可以用不同的方式看待你。您可以查看ScheduledMessageMessage的特殊类型 - 换句话说是子类,而不是让ScheduledMessage公开Message属性。 Hibernate允许您以多种方式映射这样的继承关系 - 您在这里所称的“每个子类的表”。如果您阅读section of the Hibernate documentation on this sort of mapping,它应该清楚地说明所有内容并为您提供足够的示例代码以帮助您启动并运行。

或者,要坚持使用当前的方法,您可以将ScheduledMessage的ID映射为composite id,但只包含一个组件。