2010-01-14 10 views
6

Używam strategii dziedziczenia JOINED z implementacją JPA EclipseLink. Zauważyłem, że EclipseLink dodaje kolumnę dyskryminatora, nazwaną domyślnie DTYPE, do schematu bazy danych. Rozumiem, że dyskryminator jest potrzebny dla jednej strategii dziedziczenia tabeli, ale dlaczego dla strategii ŁĄCZONE?Dlaczego EclipseLink dodaje kolumnę dyskryminatora do powiązanej strategii dziedziczenia?

EclipseLink potrzebuje tej kolumny, ponieważ mam błędy po jej usunięciu. Czy ta kolumna została dodana ze względu na wydajność, itp.? Nie jestem szczególnie szczęśliwy z tego powodu, ponieważ z punktu widzenia schematu bazy danych ta kolumna jest niepotrzebnym bałaganem.

Wirus oparty na hibernacji nie robi nic podobnego.

+0

Być może popełniłeś błąd w swoim pytaniu. Mówisz, że rozumiesz, dlaczego jeśli JEGO DOŁĄCZYŁO, ale nie, jeśli jego POŁĄCZONO ... – cletus

Odpowiedz

1

Od Joined Table Inheritance:

W połączonej tabeli dziedziczenia, każde dane akcje klasa od stołu głównego. Ponadto każda podklasa definiuje swoją własną tabelę, która dodaje rozszerzony stan . Poniższy przykład pokazuje dwa stoły, projekt i L_PROJECT, a także jak dwie klasy, projekt i LargeProject:

...

Kolumna dyskryminator jest to, co określa rodzaj i sposób co dołączył do stołu używać, więc potrzebujesz kolumny dyskryminacyjnej w tabeli nadrzędnej.

+4

Dokładnie, i to właśnie chcę zrozumieć: dlaczego EclipseLink używa tej kolumny dyskryminatora - nie jest to konieczne, strategia ŁĄCZNA opiera się na skojarzeniu kluczy obcych między klasy. Specyfikacja JPA mówi, że dyskryminator jest opcjonalny dla strategii JOINED - Hibernate JPA nie używa jej na przykład - i chciałbym się dowiedzieć, jaka jest zaleta korzystania z niej, tak jak robi to EclipseLink. –

+0

Chyba masz na myśli http://docs.jboss.org/hibernate/core/3.3/reference/en/html/inheritance.html#inheritance-tablepersubclass. ExlipseLink Wydaje mi się, że jest to pod tym względem jednoznaczne. Kolumna dyskryminacyjna unika problemu wykonywania kontroli EXISTS (lub podobnych) w celu znalezienia odpowiedniej podklasy. Nawet jeśli byłaby opcjonalna, nadal bym go używał. – cletus

+0

To ma sens, dyskryminator z pewnością ułatwia wdrażanie. Dzięki za odpowiedź! –

Powiązane problemy