OK .. After countless hours spent on good and R&D I came up with something that works. But I dont think its the best solution.
If any one has a better way of doign this then please do let me know.
Code:
<?xml version="1.0" encoding="utf-8"?>
<!--Generated from NHibernate.Mapping.Attributes on 2009-06-23 13:44:27Z.-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="ConsoleApplication1.AbstractPromotion`1[System.Int16], ConsoleApplication1" lazy="false" abstract="true" table="test_hibernate">
<id name="Id" column="id">
<generator class="assigned" />
</id>
<discriminator column="discriminator" />
<property name="Name" />
</class>
<class name="ConsoleApplication1.AbstractPromotion`1[System.String], ConsoleApplication1" lazy="false" abstract="true" table="test_hibernate">
<id name="Id" column="id">
<generator class="assigned" />
</id>
<discriminator column="discriminator" />
<property name="Name" />
</class>
<subclass name="ConsoleApplication1.IntPromotion, ConsoleApplication1" lazy="false" extends="ConsoleApplication1.AbstractPromotion`1[System.Int16], ConsoleApplication1" />
<subclass name="ConsoleApplication1.StringPromotion, ConsoleApplication1" lazy="false" extends="ConsoleApplication1.AbstractPromotion`1[System.String], ConsoleApplication1" />
</hibernate-mapping>