Closed
Description
Starting from nhibernate 5.3 while retrieving cached result of linq query with ThenFetchMany statement, nhibernate throws
"System.NullReferenceException" with following call stack:
at NHibernate.Type.AbstractType.GetHashCode(Object x)
at NHibernate.Type.AbstractType.GetHashCode(Object x, ISessionFactoryImplementor factory)
at NHibernate.Engine.CollectionKey.GenerateHashCode()
at NHibernate.Engine.CollectionKey..ctor(String role, Object key, IType keyType, ISessionFactoryImplementor factory)
at NHibernate.Engine.CollectionKey..ctor(ICollectionPersister persister, Object key)
at NHibernate.Type.CollectionType.BeforeAssemble(Object oid, ISessionImplementor session)
at NHibernate.Type.TypeHelper.BeforeAssemble(Object[] row, ICacheAssembler[] types, ISessionImplementor session)
at NHibernate.Cache.StandardQueryCache.PerformBeforeAssemble(ICacheAssembler[] returnTypes, ISessionImplementor session, IList cacheable)
at NHibernate.Cache.StandardQueryCache.GetResultFromCacheable(QueryKey key, ICacheAssembler[] returnTypes, Boolean isNaturalKeyLookup, ISessionImplementor session, IList cacheable)
at NHibernate.Cache.StandardQueryCache.Get(QueryKey key, ICacheAssembler[] returnTypes, Boolean isNaturalKeyLookup, ISet`1 spaces, ISessionImplementor session)
at NHibernate.Cache.StandardQueryCache.Get(QueryKey key, QueryParameters queryParameters, ICacheAssembler[] returnTypes, ISet`1 spaces, ISessionImplementor session)
at NHibernate.Cache.QueryCacheExtensions.Get(IQueryCache queryCache, QueryKey key, QueryParameters queryParameters, ICacheAssembler[] returnTypes, ISet`1 spaces, ISessionImplementor session)
at NHibernate.Loader.Loader.GetResultFromQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IQueryCache queryCache, QueryKey key)
at NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces)
at NHibernate.Loader.Hql.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)
at NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results, Object filterConnection)
--- End of inner exception stack trace ---
at NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results, Object filterConnection)
at NHibernate.Impl.SessionImpl.List(IQueryExpression queryExpression, QueryParameters queryParameters, IList results)
at NHibernate.Impl.AbstractSessionImpl.List[T](IQueryExpression query, QueryParameters parameters)
at NHibernate.Impl.AbstractQueryImpl2.List[T]()
at NHibernate.Linq.DefaultQueryProvider.ExecuteList[TResult](Expression expression)
at NHibernate.Linq.NhQueryable`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at NHibernate.Test.NHSpecificTest.CachingComplexQuery.ByCodeFixture.<>c__DisplayClass3_0.<TestQueryCachingWithThenFetchMany>b__4()
An unit test that reproduces the above bug is contained in pull request #2558.