Hola Andrés,

No necesariamente es indeseado ese comportamiento.

NH decide invalidar los caches de nivel 1 o la Session porque ese SP podría
modificar la información en la base de datos haciendo, potencialmente,
inválidos los datos en memoria.

Si vos estás seguro de que el SP es de lectura y no modifica datos,
entonces esta OK desactivarlo.

----------------------------------
Carlos Peix

2016-05-12 11:48 GMT-03:00 Andrés Falcón <[email protected]>:

> 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:
> [email protected]
> 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
> [email protected].
> Para acceder a más opciones, visita https://groups.google.com/d/optout.
>

-- 
-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
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 [email protected].
Para obtener más opciones, visita https://groups.google.com/d/optout.

Responder a