<class>
, pamiętając aby wszystkie otrzymały parami różne nazwy tabel. Ale z wymienionych wyżej wzgędów należy przyjąć do wiadomości, że dziedziczenia typu 'Table per concrete class' w ogólności powinno się unikać. Uruchomienie przykładu:
ant run -f build-TPCC.xml
<subclass>
.
Kliknij tutaj, aby zobaczyć pełny kod pliku .hbm.xml opisującego to podejście. Uruchomienie przykładu:
ant run -f build-TPCH.xml
<joined-subclass>
.
Tutaj znajduje się kod mapujący nasze klasy w ten sposób. Uruchomienie przykładu:
ant run -f build-TPS.xml
Przede wszystkim należy mieć świadomość, że Hibernate nie umożliwia mieszania tagów <subclass>
oraz <joined-subclass>
-
tzn żaden z nich nie może być zagnieżdżony w drugim. Decyzję musimy więc podjąć dla całego drzewa hierarchii.
Interfejsy również można mapować, bowiem gdy mają akcesory - można je traktować jak klasy abstrakcyjne. Do mapowania interfejsu można użyć każdego z trzech tagów: <class>
, <subclass>
oraz <joined-subclass>
.
Reguły, które zazwyczaj się stosuje (w prostszych przypadkach):
<subclass>
oraz <joined-subclass>
można zamieścić w oddzielnych plikach, jako korzeń drzewa (zazwyczaj w tej roli występuje <class>
), dodając do nich atrybut extends (np. <subclass name="Krowa" extends="Zwierze">
). Musimy wtedy zapewnić, aby plik mapujący nadklasę został załadowany wcześniej, ale "w nagrodę" możemy rozszerzyć dotychczasową hierarchię bez modyfikacji istniejących plików .hbm.xml, a jedynie dodając nowy.