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