Hibernate:外键是主键

3

我有两个表之间的一对一关系:

**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配置文件来映射两个类,但是在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

1个回答

4
这里的内容可以有不同的理解方式。与其让ScheduledMessage公开一个Message属性,你可以把ScheduledMessage看作是一种特殊类型的Message - 也就是子类。Hibernate允许你以多种方式映射继承关系 - 这里称为“表格子类”。如果你阅读Hibernate文档中关于这种映射的部分,它应该会让一切变得清晰,并为你提供足够的示例代码来帮助你上手。
或者,为了坚持你当前的方法,你可以将ScheduledMessage的ID映射为复合ID,但只使用单个组件。

我只阅读了关系基本映射部分,接下来我会阅读继承部分。谢谢。 - QuanNH
为了简单起见,在scheduled_message表中添加了id字段(有点丑),但它运行良好:|,谢谢。 - QuanNH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接