Hibernate映射继承

时间:2009-09-03 09:57:17

标签: hibernate inheritance mapping entity

我有一个ClassA ClassA映射到TableA。我也有一个映射,它有一个实体名称EntityA。

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

虽然我可以将EntityA的映射复制粘贴到EntityATwo,但要维护它是非常困难的。

因此,我的问题是,我如何为EntityATwo创建映射,其中我只声明EntityATwo和EntityA之间的不同,而其余的映射都是从EntityA派生的。

谢谢, 弗朗兹

1 个答案:

答案 0 :(得分:1)

我不知道直接这样做的方法。但经过你的许可,我可能会详细说明。


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

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

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


另一种可能性是在java类上使用注释,仅用于公共映射。在Hibernate中,可以通过xml映射覆盖(或完成)注释。所以我猜你可以只覆盖xml中的相关部分,你就没有重复。