Obsolete
Details
Details
Assignee
Alex Zaytsev
Alex ZaytsevReporter
William Lai
William LaiComponents
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
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)