Hibernate中的实体层次结构

时间:2011-07-26 07:02:49

标签: hibernate orm hierarchical-data hibernate-mapping object-relational-model

创建2个实体的正确方法是什么,其中1是另一个的父级?例如,我们有以下两个表:

Email_Outbox
------------
Id
Email_Id
Date_Sent

Email_Outbox_Schedule
---------------------
Id
Email_Id
Date_Sent
Date_to_Send

非常简单,我们会立即在EmailOutbox发送电子邮件,并在EmailOutboxSchedule的指定日期发送电子邮件。理想情况下,这是Java中的类层次结构,其中EmailOutboxSchedule扩展EmailOutbox。然后我们只需要指定1个额外字段dateToSend,并且可以利用典型的对象层次结构功能。用hibernate做这个有问题吗?我是否需要以任何特殊方式注释2个实体?

2 个答案:

答案 0 :(得分:2)

您可能需要阅读Hibernate inheritance mapping。但是,从逻辑上讲,我不会购买该计划扩展收件箱。听起来更多的是,计划是个人消息的属性。那么可能只是在一个消息实体上有可空属性date to send

答案 1 :(得分:0)

通过this document,我看到的解决方案是将@MappedSuperclass用于父类Email_Outbox,然后使用两个子类Scheduled_Email_Outbox和Immediate_Email_Outbox。

除@Entity注释外,Immediate_Email_Outbox将为空。

我承认,空课很不优雅,但似乎它会起作用。 (无论如何,冬眠和优雅有些不相容。)