1

创建2个实体的正确方法是,其中1是另一个的父实体?例如,我们有以下2个表:Hibernate中的实体层次结构

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做这件事有什么问题吗?我是否需要以任何特殊方式注释这两个实体?

回答

0

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

Immediate_Email_Outbox除了@Entity注释外都是空的。我承认,一个空的班级几乎没有优雅,但它似乎是行得通的。 (无论如何,冬眠和优雅有点不兼容。)

+0

它将工作,但不会代表所需的层次结构。但是这是一个合理的解决方案(比如只有可以为空的计划列才合理)。 –

+0

非常有趣的评论关于冬眠和优雅:)。这似乎是最有意义的。在我看来,这绝对比有一个可以为空的时间表列更好。 –

2

您可能需要阅读有关Hibernate inheritance mapping。然而,从逻辑上讲,我不会购买那个时间表扩展收件箱。这听起来更像是时间表是个人信息的属性。所以可能在单个消息实体上只有可空的属性date to send

+1

+1“不是继承层次结构” –

+0

我可以使dateToSend为需要马上熄灭的邮件,但我宁愿有单独的表和类。我不同意EmailOutboxSchedule是否是一个子类EmailOutbox,但是我更加好奇在hibernate中表示对象层次结构的合适机制,而不是这个特定的例子。 Hibernate继承映射的链接是JIRA问题,这似乎不涉及这个..我搜索和手册的第10章描述了继承映射,但我想要一些更简单的东西,2个独立的表 - 1个类层次结构。 –

+0

抱歉,错误的链接,必须卡在我的标签上的剪贴板。纠正。如果你真的想使用层次结构,并且你想使用你描述的表,那么你可以考虑“每个具体类的表”。 –