Hibernate, внешний ключ на две таблицы

У меня есть две сущности: покупатель и продавец, обе наследуются от супер класса персона. Так же есть сущность "счет", ее необходимо связать персоной. Но покупатель и продавец, это разные таблицы в БД. И не совсем пониманию как создать связь в Postgress, в которой одно поле может ссылаться на разные таблицы (либо продавец либо покупатель).

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

Зы, спасибо (и да я знаю что я нуб)


Ответы (1 шт):

Автор решения: MaximBogunenko

Не какой внешний ключ на 2 таблицы вам не нужен, вам нужно сделать наследование таблиц где будет базовая сущность с набором общих полей и наследники которые будут ссылаться на базовую сущность с помощью foreign key и тогда дополнительная таблица в вашем случае счет будет ссылаться на базовую таблицу.

Пример.

create table person
(
    id integer not null
        constraint person_pk
            primary key
);

create table buyer
(
    id integer not null
        constraint buyer_pkey
            primary key
        constraint buyer_person_id_fk
            references person

);

create table seller
(
    id integer not null
        constraint seller_pk
            primary key
        constraint seller_person_id_fk
            references person
);

create table account
(
    id integer not null
        constraint account_pk
            primary key,
    person_id integer not null
            references person
);

Советую вам прочитать про аннотацию @Inheritance в hibernate она вам позволит управлять таблицами на уровни orm.

→ Ссылка