Publico la solución para quien pueda llegar a tener este mismo problema.

Después de investigar un poco más, encontré que nhibernate cuando ejecuta 
un stored procedure, por default, realiza un invalidate (evict) de las 
entidades y colecciones de la second level cache (lo pueden ver en el 
código fuente que detallaba arriba). Ahora bien, si en el tag *sql-query* 
agregamos *<synchronize table="">* se evita este comportamiento indeseado; 
es decir, tiene que estar la etiqueta "synchronize" con table="", si no 
existe, por default "sincroniza" todas las tablas (una feature??, tal 
vez...)

<sql-query ....>
   ....
   <synchronize table=*""*/>
   ...
</sql-query>

Esta info la encontré al final de este post 
https://www.link-intersystems.com/blog/2011/10/08/impact-of-native-sql-queries-on-hibernates-second-level-cache/

gracias de todos modos.

Andrés Falcón.

El miércoles, 11 de mayo de 2016, 12:52:56 (UTC-3), Andrés Falcón escribió:
>
> Buenos día grupo, acudo a uds a ver si me ayudan a solucionar un problema 
> que tengo hace unos días.
>
> Quisiera saber si es normal el comportamiento de siempre borrar la Caché 
> antes de ejecutar un stored procedure con *GetNamedQuery*. Me está 
> sucediendo que antes de que NHibernate ejecute el stored procedure hace un 
> Evict de los datos y las collections que tengo en la cache.
>
> Segun pude analizar con el código fuente, el tema está en la clase 
> *NativeSqlQueryPlan* (método CoordinateSharedCacheCleanup) crea un objeto 
> de tipo  *BulkOperationCleanupAction* y es ahí donde veo que agrega estas 
> clases de la cache
>
> Intenté poner Cacheable(false) para la ejecución del SP y no pasó nada.
>
> Paso mi configuración de la caché para ver si estoy cometiendo un error o 
> me faltó configurar algo mas, dado que es la primera vez que utilizo Cache
>
> configuration.Cache(delegate(ICacheConfigurationProperties properties)
> {
>    properties.Provider<NHibernate.Cache.HashtableCacheProvider>();
>    properties.UseQueryCache = true;
> });
>
> configuration.EntityCache<FieldType>(
>    entityCacheconfig => {entityCacheconfig.Strategy = 
> EntityCacheUsage.ReadWrite; }
> );
> configuration.EntityCache<FieldValue>(
>    entityCacheconfig => { entityCacheconfig.Strategy = 
> EntityCacheUsage.ReadWrite; }
> );
>
> Estoy usando nh 3.4.0.4000
>
> Gracias!
>
> Andrés Falcón
>
>

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
NHibernate-Hispano@googlegroups.com
Para más, visite: http://groups.google.com/group/NHibernate-Hispano
--- 
Has recibido este mensaje porque estás suscrito al grupo "NHibernate-Hispano" 
de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía 
un correo electrónico a nhibernate-hispano+unsubscr...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/d/optout.

Responder a