con il discriminator utilizzi un'unica tabella in cui vengono messi tutti i dati delle sottoclassi di una classe astratta.
ad es. hai una classe astratta Gatto. poi 2 altre classi che derivano da questa e che hanno attributi aggiuntivi per la sottoclasse.
quando salvi un oggetto della sottoclasse va sempre a finire nella tabella gatto. quando poi ti riprendi ad es. un oggetto GattoRandagio(sottoclasse) sarà appunto il discriminator messo nella tabella che ti dirà quali tuple sono riferite a un oggetto GattoRandagio. questo naturalmente è gestito in modo trasparente da hibernate grazie al file di mapping in cui specifichi il discriminator per quella sottoclasse.
ho trovato questo esempio con le birre
classe astratta Birra . sottoclassi Domestic e di Importazione
codice:
<class name="com.example.Beer" table="beer"
abstract="true">
<id name="id" type="integer">
<generator class="native"/>
</id>
<discriminator column="type"/>
<property name="brand"/>
<property name="price"/>
<many-to-one name="truck" column="truck_id"/>
<subclass name="com.example.DomesticBeer"
discriminator-value="DOMESTIC"/>
<subclass name="com.example.ImportedBeer"
discriminator-value="IMPORTED">
<property name="country"/>
<property name="duty"/>
</subclass>
</class>
quella di importazione ha 2 attributi aggiuntivi
<property name="country"/>
<property name="duty"/>
che verranno riempiti naturalmente solo quando persisti la classe ImportedBeer.
spero di averti chiarito qualcosa.
ciao