Cara memetakan ke beberapa tabel dari satu kolom menggunakan JPA

Saya memiliki 5 tabel 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,
...)

Kolom [MainReg.OwnerId] mereferensikan baris dalam tabel [Perusahaan] jika [MainReg.PersonalObjectId] = 1 dan baris dalam tabel [Orang] jika [MainReg.PersonalObjectId] = 2.

Pertanyaan saya adalah, bagaimana cara memetakan tabel ini menggunakan JPA?


person Rustem    schedule 03.11.2012    source sumber
comment
Lihatlah EclipseLink bergabung dengan pewarisan tabel.   -  person codeturner    schedule 11.05.2013


Jawaban (2)


Anda tidak akan dapat memetakannya dalam JPA murni. Diperlukan kunci asing yang berbeda untuk dapat memetakannya di JPA: satu yang akan mereferensikan Perusahaan, dan satu lagi yang akan mereferensikan Orang.

Dengan Hibernate, Anda dapat memetakannya menggunakan Anotasi apa saja.

person JB Nizet    schedule 03.11.2012
comment
Terima kasih atas balasan yang cepat. Saya menggunakan EclipseLink. Saya kira saya perlu melihat ke Hibernate. - person Rustem; 03.11.2012
comment
Saya lebih suka mencoba memperbaiki desain database Anda. - person JB Nizet; 03.11.2012
comment
Sayangnya hal ini tidak mungkin dilakukan. Karena saya sedang bekerja dengan database yang sudah digunakan. Saya mengaksesnya dari jarak jauh. - person Rustem; 05.11.2012

Di EclipseLink Anda dapat menggunakan hubungan @VariableOneToOne untuk memetakannya.

Jika tidak, Anda mungkin dapat menggunakan warisan TABLE_PER_CLASS untuk itu, atau mengubah model data Anda.

person James    schedule 05.11.2012