You still did not post your mapping files so I cannot give specific advice. Look at section 9.1.2 in the reference doc. All of Chapter 9 would be good to read as it describes various ways to deal with inheritance. In case you don't have the doc here is the table per subclass example copied from the doc:
Code:
<class name="Payment" table="PAYMENT">
<id name="id" type="long" column="PAYMENT_ID">
<generator class="native"/>
</id> <property name="amount" column="AMOUNT"/>
...
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
<key column="PAYMENT_ID"/>
<property name="creditCardType" column="CCTYPE"/>
...
</joined-subclass>
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
<key column="PAYMENT_ID"/>
...
</joined-subclass>
</class>
I have not actually used this approach. I used table per class hierarchy, which works fine for me. Since the example does not show the class definitions it's a bit unclear how they look. The confusing issue to me is the id property. It appears that the id in the superclass is used for each of the subclasses. There's a similar example in the book
Hibernate in Action that shows different ids for each subclass.
I suggest you play around with this example and use hbm2ddl to generate the DDL for the tables. Then go the other way and generate the Java. That should be instructive.
Good luck.