不寻常的Hibernate继承映射

时间:2010-02-04 16:19:43

标签: java hibernate orm jpa mapping

我使用Java和Hibernate对对象关系映射进行了一个奇怪的谜题。

我们现有的架构看起来像这样:

create table foo (id int8, /* ... */ primary key (id));
create table bar (id int8, foo int8, /* ... */ primary key (id));
alter table bar add constraint fk_foobar foreign key (foo) references foo;

通常情况下,您会使用ManyToOne关系进行映射。

class Foo { /* ... */ }
class Bar { private Foo foo; /* ... */ }

但是我团队中的一个人想要将其映射到继承关系中:

class Foo { /* ... */ }
class Bar extends Foo { /* ... */ }

有没有办法用Hibernate解决这个问题?

编辑:重点是表bar有一个外键列foo,它与bar的标识列不同。< / p>

2 个答案:

答案 0 :(得分:0)

@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Foo { .. }

但只有当逻辑成为继承时才这样做。即如果是Dog extends Animal,则不是User extends Group

答案 1 :(得分:0)

如果Bar Foo,则只应将其映射为继承关系。否则,你应该使用组合。 但是,在幕后,我不知道上下文,所以我不知道将这些类映射为子类和基类是否正确。

无论如何,是的,有可能这样做。 查看the different possibilities to create an inheritance relationship in Hibernate.

例如,您可以在此处使用Joined Subclass场景:

<class name="Foo" table="Foos">
   <joined-subclass="Bar" table="Bars">
   </joined-subclass>
</class>