我使用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>
答案 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>