Hibernate映射在两个不同的Java实体表中,并在它们之间继承

时间:2010-12-27 11:52:19

标签: java hibernate inheritance mapping

我正在研究一个Hibernate继承映射问题,我似乎无法找到答案。

我有两个班级:

Child extends Parent

我已将它们映射为两个不同的模型,只使用2个hbm文件,没有继承,只有一个<class>元素。这意味着子项的hbm确实重复了父项的hbm中定义的字段。

这样做的原因是我希望它们完全独立,因为孩子的约束不同于父,所以它们被映射到2个不同的表作为2个不同的模型,它们恰好是java中的子父。

现在的问题是查询不是独立运行的--Hibernate知道2个java类之间有继承关系所以当我尝试检索Child的实例时,Hibernate会为它找到2个实现者,返回两个表的结果。

我知道这是一种奇怪的使用案例,但如果有人有任何建议不涉及删除ChildParent之间的继承(我正在考虑如果我找不到另一种解决方案),我会先尝试别的。

1 个答案:

答案 0 :(得分:0)

让我在这个答案之前加上警告

  • 如果您正在尝试执行这些查询,听起来可能有比继承更好的方法
  • 即使您修复了这些查询,您也可能会遇到其他问题

话虽如此,你不应该像这样区分继承的查询结果。这不是正常用法。通常,查询结果应基于表中的字段。我建议创建一个布尔字段isChild,子构造函数设置为true,父构造函数设置为false。然后,您可以根据该字段查询所有对象,以获取所有父项或所有子项。