Je requête suivante dans NHibernate où le résultat est une liste de DTO, pas des entités:SetCacheable jette IndexOutOfBoundsException
var result = query
//.SetCacheable(true)
.SetResultTransformer(new MyDTOTransformer())
.List<DTO>();
Cela fonctionne avec SetCacheable en commentaire, mais il jette un IndexOutOfBoundsException quand je mets SetCacheable à true.
C'est le stacktrace:
at NHibernate.Type.TypeFactory.Disassemble(Object[] row, ICacheAssembler[] types, Boolean[] nonCacheable, ISessionImplementor session, Object owner)
at NHibernate.Cache.StandardQueryCache.Put(QueryKey key, ICacheAssembler[] returnTypes, IList result, Boolean isNaturalKeyLookup, ISessionImplementor session)
at NHibernate.Loader.Loader.PutResultInQueryCache(ISessionImplementor session, QueryParameters queryParameters, IType[] resultTypes, IQueryCache queryCache, QueryKey key, IList result)
at NHibernate.Loader.Loader.ListUsingQueryCache(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Loader.Loader.List(ISessionImplementor session, QueryParameters queryParameters, ISet`1 querySpaces, IType[] resultTypes)
at NHibernate.Loader.Custom.CustomLoader.List(ISessionImplementor session, QueryParameters queryParameters)
at NHibernate.Impl.SessionImpl.ListCustomQuery(ICustomQuery customQuery, QueryParameters queryParameters, IList results)
at NHibernate.Impl.SessionImpl.List(NativeSQLQuerySpecification spec, QueryParameters queryParameters, IList results)
at NHibernate.Impl.SessionImpl.List[T](NativeSQLQuerySpecification spec, QueryParameters queryParameters)
at NHibernate.Impl.SqlQueryImpl.List[T]()
at ...
Quelqu'un peut-il me aider et dire comment je peux résoudre ce problème (ou même si cela est pris en charge NHibernate)? J'utilise actuellement NHibernate-version 2.1.0.4000.
Merci, Jelle
Avez-vous activé le cache de requête dans votre configuration? – AlexCuse
J'ai mis use-query-cache à true (en utilisant fluent-nhibernate). Cependant, je n'ai pas spécifié de fournisseur de cache de second niveau. J'essaie seulement de réaliser que le résultat de ma requête nommée est mis en cache pendant ma session. – Jelle