Hibernate对多个表使用相同的映射

时间:2013-11-15 19:37:09

标签: java database hibernate

我有2个相同的数据库实例,包含具有相同模式的FOO_TABLE。所以,目前我每个数据库实例都有一个类定义:

<class name="FooTable" table="FOO_TABLE" entity-name="FooTableInstance1">
  <property name="..." column="..." />
  <property name="..." column="..." />
  ....
</class>

<class name="FooTable" table="FOO_TABLE" entity-name="FooTableInstance2">
  <property name="..." column="..." />
  <property name="..." column="..." />
  ....
</class>

问题是我不想复制粘贴属性,因为这些表具有相同的模式。是否可以从包含所有映射的基类继承2个类,并在2个子类中指定不同的实体名称?

2 个答案:

答案 0 :(得分:0)

是的,有可能。请查看相关文档:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html

更具体地说,请检查9.1.5。每个具体类的表。使父类抽象,事情应该正常。

根据文档,您需要3个Java类:

  1. Foo(摘要,包含两个表中所需的所有字段)
  2. FooChild1(具体,Foo的子类,不包含新字段)
  3. FooChild2(具体,Foo的子类,不包含新字段)
  4. 您需要两张桌子。一个映射到FooChild1,另一个映射到FooChild2

答案 1 :(得分:0)

另一种选择(如果我正确理解你的问题,也许是正确的选择)是使用@MappedSuperclass来定义公共映射。您是否使用此或先前发布的建议取决于数据模型:例如,这两个实体是否相关,以便您能够跨两个实体进行查询?

e.g。 select f from Foo会返回所有Foo1Foo2

当Foo是MappedSuperclass时,无法做到这一点。

详情请见此处: