Question

I'm trying to map a self-referencing table with NHibernate 3.2.0.4000. However, whenever I get an instance of DomainObject, it eagerly loads the subsequent versions. I'd rather not have to put an extra column my table, though that is an option.

Can I have NHiberante not eagerly load all of the subsequent versions without maintaining the relationship on both sides?

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping assembly="NHibernateHierarchyTest" namespace="NHibernateHierarchyTest" xmlns="urn:nhibernate-mapping-2.2">
    <class name="DomainObject" table="DOMAIN_OBJECT" lazy="true" >
        <id name="DomainObjectId" column="DOMAIN_OBJECT_ID">
            <generator class="identity" />
        </id>
        <property name="Property">
            <column name="PROPERTY" />
        </property>
        <many-to-one name="PreviousVersion" class="DomainObject" >
            <column name="PREVIOUS_VERSION_DOMAIN_OBJECT_ID" />
        </many-to-one>
        <!--<many-to-one name="SubsequentVersion" class="DomainObject">
            <column name="SUBSEQUENT_VERSION_DOMAIN_OBJECT_ID" />
        </many-to-one>-->
        <one-to-one name="SubsequentVersion" class="DomainObject" property-ref="PreviousVersion" />
    </class>
</hibernate-mapping>
Was it helpful?

Solution

The one-to-one mapping will be always loaded eagarly with NHibernate. Not sure if this is a feature or bug, but that is how it works. If you need lazy load, use many-to-one or one-to-many. Not the best answer I know, but if you can add new column...

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top