NHibernate version:1.2
Mapping documents:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HibernateLayer" namespace="HibernateLayer.Mappings">
<class name="WorkEvent" table="WorkEvent" lazy="false" discriminator-value="WORKEVENT">
<id name="Id" access="field.pascalcase-underscore" column="Id" type="int">
<generator class="increment"/>
</id>
<discriminator column="EventType" type="string"/>
<property name="Date" column="Date" type="datetime" access="field.pascalcase-underscore"/>
<property name="Author" column="Author" type="string" length="100" access="field.pascalcase-underscore"/>
<many-to-one class="Person" name="Person" column="PersonId" access="field.pascalcase-underscore" cascade="all"/>
<subclass name="DischargeEvent" discriminator-value="DISCHARGE" lazy="false">
<property name="DischargeReason" column="DischargeReason" type="string" access="field.pascalcase-underscore"/>
<property name="DischargeReasonORP" column="DischargeReasonORP" type="string" access="field.pascalcase-underscore"/>
</subclass>
<subclass name="VacationEvent" discriminator-value="VACATION" lazy="false" >
<property name="VacationEnd" column="VacationEnd" type="datetime" access="field.pascalcase-underscore"/>
<property name="VacationStart" column="VacationStart" type="datetime" access="field.pascalcase-underscore"/>
</subclass>
</class>
</hibernate-mapping>
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HibernateLayer" namespace="HibernateLayer.Mappings">
<class name="Person" table="Person" lazy="false">
<id name="Id">
<column name="PersonId" not-null="true"/>
<generator class ="increment" />
</id>
<property name="FName" column="FName" length="100" not-null="true"></property>
<property name="LName" column="LName" length="100" not-null="true"></property>
<property name="SName" column="SName" length="100" not-null="true"></property>
<bag name="WorkEvent" cascade="all" table="WorkEvent" lazy="false">
<key column="PersonId"/>
<one-to-many class="WorkEvent"/>
</bag>
<bag name="VacationEvent" cascade="all" table="WorkEvent" lazy="false">
<key column="PersonId"/>
<one-to-many class="VacationEvent"/>
</bag>
<bag name="DischargeEvents" cascade="all" table="WorkEvent" lazy="false">
<key column="PersonId"/>
<one-to-many class="DischargeEvent"/>
</bag>
</class>
</hibernate-mapping>
Code between sessionFactory.openSession() and session.close():Code:
IList<DischargeEvent> l = session.CreateCriteria(typeof(DischargeEvent)).List<DischargeEvent>();
Full stack trace of any exception that occurs:
In database I have a few Vacation Events, and a few Discharge Events. But when I`m trying to get any person, or any Vacation or Discharge event - I have an exception:
Object with id: 45 was not of the specified sublcass: HibernateLayer.Mappings.VacationEvent (loading object was of wrong class [HibernateLayer.Mappings.DischargeEvent])
Looks like NHibernate trying to get ALL event entryes from WorkEvent table
Name and version of the database you are using:
MS SQL Server 2005