我有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个子类中指定不同的实体名称?
答案 0 :(得分:0)
是的,有可能。请查看相关文档:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html
更具体地说,请检查9.1.5
。每个具体类的表。使父类抽象,事情应该正常。
根据文档,您需要3个Java类:
Foo
(摘要,包含两个表中所需的所有字段)FooChild1
(具体,Foo的子类,不包含新字段)FooChild2
(具体,Foo的子类,不包含新字段)您需要两张桌子。一个映射到FooChild1
,另一个映射到FooChild2
。
答案 1 :(得分:0)
另一种选择(如果我正确理解你的问题,也许是正确的选择)是使用@MappedSuperclass
来定义公共映射。您是否使用此或先前发布的建议取决于数据模型:例如,这两个实体是否相关,以便您能够跨两个实体进行查询?
e.g。 select f from Foo
会返回所有Foo1
和Foo2
。
当Foo是MappedSuperclass时,无法做到这一点。
详情请见此处: