Hibernate:从继承到组合

时间:2011-07-25 18:10:48

标签: hibernate inheritance composition

我有一个目前严重依赖继承的域模型,并且由于与Hibernate的代理模型相关的几个问题,我正在重构模型以使用组合。我遇到的主要问题是以下情况:

  1. 将记录X作为父级
  2. Hibernate将代理返回到Parent
  3. instance of现在打破了向下转型
  4. 此外,回溯到父表的外键引用之类的东西将不适用于每个具体子类策略的表。所以现在我基本上将Parent作为一个具体的类,并将Child1Child2的引用放入父级(需要连接以根据需要获取数据)。

    根据这个描述,有没有人走过类似的道路并遇到任何问题,或者这种方法有意义吗?有没有更好的方法我没想过?

2 个答案:

答案 0 :(得分:1)

我从来没有从一个转换到另一个,但我经历过这两种类型,而你正朝着正确的方向前进。问题实际上是以这种方式使用的instanceof和downcast打破了多态性,Hibernate假设你正在使用而不是颠覆。向真正的面向对象模型迈进是朝着正确方向迈出的一步。

答案 1 :(得分:1)

如果我理解你正确,在你的示例中,父类是超类,child1和child2是子类。 大多数时候,构图是更好的选择,所以因为我不知道你的模型的任何细节,我会以正确的方式说出你的。 但是我认为如果你的child1和child2会引用父对象会更好,因为它们会“扩展”父对象。父母甚至不应该知道它被延长了,所以父母不应该引用孩子。