2009-09-03 185 views
1

我有一个类ClassA映射到TableA。我也有一个映射,它有一个EntityA的实体名称。Hibernate映射继承

现在,我需要在TableA的ClassA之间创建另一个名为EntityATwo的映射,但略有不同。

尽管我可以复制粘贴EntityA到EntityATwo的映射,但要维护这一点非常困难。

因此,我的问题是,我该如何创建EntityATwo的映射,其中我只声明EntityATwo和EntityA之间的不同,而映射的其余部分则来自EntityA。

感谢, 弗朗茨

+0

+1对于精确的问题和良好的交互 – KLE 2009-09-03 11:09:50

回答

1

我不知道一个办法直接做到这一点。但经你的允许,我可以详细说明。


在我们的代码,我们通常喜欢一个Java类映射到一个语义(我们更愿意与比选中字符串编译检查类工作)。因此,我们将映射到两个类而不是将类两次映射到具有不同实体名称的表。 我们将有:

  • ClassA作为常见的超类,大多数映射是常见的。它在所有这个映射中被声明(在hbm.xml中)。
  • ClassA1扩展了ClassA,提供了它的唯一映射(如果需要,还提供了java代码,否则它可能是空的)。它继承了ClassA的通用映射。
  • ClassA2也

您不必重复了。你从语义上获得了一些东西。


另一种可能性是在Java类使用注解,只对共同映射。在Hibernate中,注释可以被xml映射覆盖(或完成)。所以我想你可以只覆盖xml中的相关部分,并且你不会有重复。

+0

请随时详细说明一些:-) 我想我可以有两个类映射到同一个表。但是,我仍然认为EntityATwo地图与EntityA地图的地图几乎相同,只是略有不同。 谢谢 – 2009-09-03 10:09:59

+0

@Franz我编辑着重于您的评论。它更清楚吗?休眠站点已关闭,所以我无法提供链接。 – KLE 2009-09-03 10:15:00

+0

好吧,所以你有ClassA1和ClassA2都从Java端扩展ClassA。 ClassA映射到TableA(例如)。此外,ClassA1和ClassA2映射到TableA。 但是,您如何准确指定ClassA1和ClassA2继承ClassA的通用映射? 谢谢 – 2009-09-03 10:41:18