Skip to content

New InvalidCastException when using batched queries with NH 5.3.0 #2442

Closed
@mattzink

Description

@mattzink

After attempting to update from NH 5.2.7 -> 5.3.0, one of our unit tests now fails to execute a batched Criteria query.

The query looks like:

_session.QueryOver<PathHolder>()
    .Where(ph => ph.Path.Id == pathId)
    .Left.JoinQueryOver(ph => ph.Attachment)
    .Left.JoinQueryOver(a => a.Foo)
    .Left.JoinQueryOver(f => v.Bar)
    .Future();

var PathHolders = _session.QueryOver<PathHolder>()
    .Where(ph => ph.Path.Id == pathId)
    .Left.JoinAlias(ph => ph.StatusConditions, () => statusCondition)
    .TransformUsing(Transformers.DistinctRootEntity)
    .Future()
    .ToList();

The above .ToList() causes the following exception:

Type: GenericADOException
Message: Failed to execute query batch[SQL: SELECT ..... ]
Stack:
   at NHibernate.Multi.QueryBatch.ExecuteBatched()
   at NHibernate.Multi.QueryBatch.Execute()
   at NHibernate.Multi.QueryBatchExtensions.FutureList`1.get_Value()
   at NHibernate.Multi.QueryBatchExtensions.FutureEnumerable`1.GetEnumerable()
   at NHibernate.Multi.QueryBatchExtensions.FutureEnumerable`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)

Inner Exception
Type: InvalidCastException
Message: Unable to cast object of type 'MyApp.PathHolder' to type 'System.Object[]'.
Stack:
   at NHibernate.Cache.QueryCacheResultBuilder.AddRow(Object result, Object[] entities, IPersistentCollection[] collections) in D:\BuildAgent\work\30546188361a242\src\NHibernate\Cache\QueryCacheResultBuilder.cs:line 49
   at NHibernate.Loader.Loader.GetRowFromResultSet(DbDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies, IResultTransformer forcedResultTransformer, QueryCacheResultBuilder queryCacheResultBuilder, Action`2 cacheBatchingHandler) in D:\BuildAgent\work\30546188361a242\src\NHibernate\Loader\Loader.cs:line 441
   at NHibernate.Multi.QueryBatchItemBase`1.ProcessResultsSet(DbDataReader reader) in D:\BuildAgent\work\30546188361a242\src\NHibernate\Multi\QueryBatchItemBase.cs:line 242
   at NHibernate.Multi.QueryBatch.ExecuteBatched() in D:\BuildAgent\work\30546188361a242\src\NHibernate\Multi\QueryBatch.cs:line 172

My guess is this is related to #2090 (Add support for caching fetched relations with Criteria), since it seems to be the only change in this area.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions