"collection is not associated with any session" exception upon getting data

Description

After upgrading our program from NHibernate 1.2.1 to 2.1.2GA, we cannot get data from some object. "collection is not associated with any session" exception is thrown. Please advise if there is some solution as it may delay our

To test the mapping, we just use the following code. The expected result is more than one row data is returned.

ISession session = sessionFactory.GetSession();

NHibernate.Criterion.ICriterion[] clientIDCriterions = {
NHibernate.Criterion.Expression.Or(
NHibernate.Criterion.Expression.Eq("ClientID", 1),
NHibernate.Criterion.Expression.Eq("ClientID", 2))};

ICriteria criteria = session.CreateCriteria(typeof(ClientTradingLimit));

foreach (ICriterion criterion in criterions)
{
criteria.Add(criterion);
}

// Throw exception
criteria.List<ClientTradingLimit>();

The mapping is in 2 xml files as follow:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" namespace="datamodel" assembly="datamodel">

<class name="ClientTradingLimit" table="client_trading_limit">

<id name="TradingLimitID" column="ctm_trading_limit_id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>

<property name="ClientID" column="ctm_client_id" type="Int32" not-null="true" />
<property name="OpenBalance" column="ctm_open_balance" type="Decimal" not-null="true" />
<property name="CurrencyID" column="ctm_currency_id" type="Int32" not-null="true" />
<property name="WarningThreshold" column="ctm_warning_threshold" type="Decimal" not-null="true" />

<bag name="TradingLimitDetails" inverse="true" cascade="all">
<key column="ctd_trading_limit_id" />
<one-to-many class="ClientTradingLimitDetail" />
<loader query-ref="LastTradingLimitDetail"/>
</bag>

</class>

<sql-query name="LastTradingLimitDetail">
<load-collection alias="ctd" role="ClientTradingLimit.TradingLimitDetails" />
SELECT TOP 1 {ctd.*}
FROM client_trading_limit_detail
WHERE ctd_trading_limit_id = :id
ORDER BY ctd_trading_limit_detail_id DESC
</sql-query>

</hibernate-mapping>

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false" namespace="datamodel" assembly="datamodel">

<class name="ClientTradingLimitDetail" table="client_trading_limit_detail">

<id name="TradingLimitDetailID" column="ctd_trading_limit_detail_id" type="Int32" unsaved-value="0">
<generator class="native" />
</id>

<property name="OrderID" column="ctd_order_id" type="Int32" not-null="true" />
<property name="SubOrderID" column="ctd_sub_order_id" type="Int32" not-null="true" />
<property name="SubOrderReqID" column="ctd_sub_order_req_id" type="Int32" not-null="true" />
<property name="OrderedValue" column="ctd_ordered_value" type="Decimal" not-null="true" />
<property name="TradingLimitBalance" column="ctd_trading_limit_balance" type="Decimal" not-null="true" />

<!-- Foreign Key(s) -->
<many-to-one name="ClientTradingLimit" class="ClientTradingLimit" column="ctd_trading_limit_id" not-null="true"/>

</class>

</hibernate-mapping>

The call stack is as follow:

[Error] 23/02/2010 16:35:19.725 - [OMSMain] HibernateException occured: collection is not associated with any session
at NHibernate.Collection.AbstractPersistentCollection.ForceInitialization()
at NHibernate.Engine.StatefulPersistenceContext.InitializeNonLazyCollections()
at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Loader.Criteria.CriteriaLoader.List(ISessionImplementor session)
at NHibernate.Impl.SessionImpl.List(CriteriaImpl criteria, IList results)
at NHibernate.Impl.CriteriaImpl.List(IList results)
at NHibernate.Impl.CriteriaImpl.List[T]()
at mizuho.oms.server.DAO.GetData[T](ICriterion[] criterions, Boolean acquireWriteLock)

Environment

None

Activity

Show:

Alex Zaytsev 
September 9, 2020 at 8:23 PM

Could not be reproduced on 5.3.x


Moved here.

Obsolete

Details

Assignee

Reporter

Components

Affects versions

Priority

Who's Looking?

Open Who's Looking?
Created February 23, 2010 at 3:24 AM
Updated September 9, 2020 at 8:23 PM
Resolved September 9, 2020 at 8:23 PM
Who's Looking?