Hibernate继承与现有表

时间:2010-08-05 13:19:02

标签: java mysql hibernate

我的数据库中有2个现有表。 我们暂时将它们称为主席。 这两个表都映射为Hibernate中的实体

这些表现在已存在于我的数据库中一段时间​​了,并且它们有自己生成的,自动生成的ID作为主键。

现在,我想在我的Java代码中将这些实体分组在非常合理的 Furniture 接口下,这样我就可以在 House 类中创建一个List。

我已经研究过Hibernate继承,但似乎没有弄明白。 如何让我的 House 课程列出其拥有的所有家具?我应该使用哪种继承映射策略?

谢谢, 巴特

1 个答案:

答案 0 :(得分:1)

你走在正确的轨道上。如果您创建Furniture接口或基类,并且具有Table和Chair实现/扩展该类型,那么您应该很高兴。然后你可以有一个

List<Furniture> 

为你的房子。

如果要实现hibernate文档中概述的任何多态映射策略,则需要修改映射的唯一情况。一些选项是

  1. 创建一个Furniture表,并在该表中包含所有Chairs / Tables(每个类层次结构一个表)。你不必这样做。在这种情况下,您的表将具有两个类的所有属性,因此根据要保留的类型,不会使用所有列。会有一个'discriminator'列,所以hibernate可以告诉行的类型。

  2. 您想创建一个Furniture表,并重构/规范化您的Table / Chair表,以便将所有常用字段拉入Furniture表。你保留桌子和椅子表。这是另一种多态映射(检查文档)

  3. hibernate docs中的其他选项。

  4. 我认为选项1是hibernate文档中的首选策略。

    但是要了解它,您不必执行任何操作 - 如果您愿意在表中包含重复的列,则您的实体可以从其他类型扩展/继承而无需任何特殊的映射注意事项。

    我会写一些简单的JUnit或其他任何测试并试一试。