Как сопоставить несколько таблиц из одного столбца с помощью JPA

У меня есть 5 таблиц MainReg, Person, PersonInfo, Company, CompanyInfo

CREATE TABLE [MainReg] (
[IdMainReg] [uniqueidentifier] NOT NULL,
[PersonalObjectId] [int] NULL,
[OwnerId] [nvarchar](36) NULL,
...)

CREATE TABLE [Person] (
[IdPerson] [uniqueidentifier] NOT NULL,
[PersonInfoId] [nvarchar](36) NULL,
...)

CREATE TABLE [PersonInfo] (
[IdPersonInfo] [uniqueidentifier] NOT NULL,
...)

CREATE TABLE [Company] (
[IdCompany] [uniqueidentifier] NOT NULL,
[CompanyInfoId] [nvarchar] NULL,)
...)

CREATE TABLE [CompanyInfo] (
[IdCompanyInfo] [uniqueidentifier] NOT NULL,
...)

Столбец [MainReg.OwnerId] ссылается на строку в таблице [Company], если [MainReg.PersonalObjectId] = 1, и на строку в таблице [Person], если [MainReg.PersonalObjectId] = 2.

Мой вопрос: как сопоставить эти таблицы с помощью JPA?


person Rustem    schedule 03.11.2012    source источник
comment
Взгляните на EclipseLink наследование объединенных таблиц.   -  person codeturner    schedule 11.05.2013


Ответы (2)


Вы не сможете отобразить это в чистом JPA. Чтобы иметь возможность сопоставить это в JPA, потребуются разные внешние ключи: один, который будет ссылаться на Company, и другой, который будет ссылаться на Person.

С Hibernate вы сможете сопоставить это с помощью Любая аннотация.

person JB Nizet    schedule 03.11.2012
comment
Спасибо за быстрый ответ. Я использую EclipseLink. Думаю, мне нужно заглянуть в Hibernate. - person Rustem; 03.11.2012
comment
Я бы предпочел исправить дизайн вашей базы данных. - person JB Nizet; 03.11.2012
comment
К сожалению, это невозможно. Поскольку я работаю с базой данных, которая уже используется. Я получаю доступ к нему удаленно. - person Rustem; 05.11.2012

В EclipseLink вы можете использовать отношение @VariableOneToOne для сопоставления этого.

В противном случае вы можете использовать для него наследование TABLE_PER_CLASS или изменить свою модель данных.

person James    schedule 05.11.2012