This sounds similar to our class hierarchy, where we have a base class and other classes extend that base class. We have mapped our classes using sub-classes, e.g.
Code:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
<class name="Domain.Model.Definition, Domain.Model" table="Definition" discriminator-value="Definition">
<meta attribute="scope-class" inherit="false">public abstract</meta>
<id name="Id" type="Persistence.NullGuidUserType, Persistence" column="Id">
<generator class="assigned" />
</id>
<discriminator column="DEFINITION_TYPE" type="string" />
<version name="Version" column="Version" type="Int32" unsaved-value="-1" />
<subclass name="Domain.Model.ComputedAttributeDefinition, Domain.Model">
<property name="AttributeDefinitionId" type="Persistence.NullGuidUserType, Persistence" column="AttributeDefinitionId"/>
</subclass>
<subclass name ="Domain.Model.ItemAttributeDefinition, Domain.Model" >
<property name="ItemDefinitionId" type="Persistence.NullGuidUserType, Persistence" column="ItemDefinitionId"/>
</subclass>
</class>
</hibernate-mapping>
We have decided to use Table per class hierarchy, hence the use of a discriminator, but you can obviously choose table per sub-class if that suits you better.
We have also marked the base class as public abstract, as it is abstract ;), but if your base class can be instantiated then you obviously don't want to use that.
I recommend you get a copy of Hibernate In Action for a better expalantion than what I've given.
Just be aware that this book requires *very* careful attention when reading it.