Siemka,
Trochę mi wstyd że o takie rzeczy pytam, ale już kilka godzin nad tym siedzę i już mi mózg powoli paruje.
Otóż mam encję Base
z polami a
, b
, c
, d
, a także encję Extended
z polami e
, f
, g
. No siłą rzeczy, tak już zamodelowałem, że Extended JEST Base
, i class Extended extends Base
. Projekt typowy enterprise, mapuję na bazę Oracle na dwie tabelki - w jednej mam bazodanowe pola a
, b
, c
, d
, a w drugiej pola e
, f
, g
oraz fk na pierwszą tabelę. Zdecydowałem, że jeśli jest jakiś obiekt typu Extended
jest persystowany, to ma rekord w tabeli BASE
oraz rekord w tabeli EXTENDED
. No okej, przechodzimy do javy:
class Extended extends Base
No i według https://www.baeldung.com/hibernate-inheritance pasuje mi, żebym użył strategii Joined Table
.
Dodaję do tego Springowe CRUDowe repository dla typu Base
.
Jednak tak się zastanowiłem, że w końcu powinniśmy wybierać kompozycję zamiast dziedziczenia, i wymyśliłem sobie inne podejście:
a) klasa Extended
nie rozszerza tej klasy Base
- jest zwykłą encją
b) w Extended
jest pole typu Base
, oznaczone jako @Delegate
z lomboka
b) zarówno Extended
jak i Base
implementują interfejs CommonInterface
(nazwa interfejsu tutaj mniej ważna)
c) Interfejs CommonInterface
zawiera w sobie wszystkie metody z klasy Base
d) Są 2 różne Springowe CRUD repozytoria - osobno dla Base
i osobno dla Extended
Co sądzicie, które podejście "lepsze"? Bo mam już ból głowy i możliwe że wymyślam jakieś głupoty :D