Необычное отображение наследования Hibernate - PullRequest
1 голос
/ 04 февраля 2010

У меня есть любопытная головоломка с объектно-реляционным отображением с использованием 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.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2010

Вы должны отображать это как отношение наследования, только если Bar является Foo. В противном случае вы должны использовать композицию. Но, разумеется, я не знаю контекста, поэтому я не знаю, правильно ли сопоставлять эти классы как вспомогательный и базовый класс.

В любом случае, да, это возможно. Проверьте различные возможности для создания отношений наследования в Hibernate.

Например, вы можете использовать сценарий присоединенного подкласса здесь:

<class name="Foo" table="Foos">
   <joined-subclass="Bar" table="Bars">
   </joined-subclass>
</class>
0 голосов
/ 04 февраля 2010
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Foo { .. }

Но делайте это только в том случае, если логично быть наследством. То есть если это Dog extends Animal, а НЕ в случае User extends Group

...