2012-08-22 10 views
5

Después de cerrar mis consultas (búsquedas), la sesión en caché se cierra, en una nueva sesión, hibernate está desalojando todo después de cambiar la base de datos mediante una consulta SQL de escritura aleatoria, ¿cómo puedo detener eso? sucediendo ? Estoy buscando crear políticas para cosas que rara vez cambian.ehcache hiberna el almacenamiento en caché de segundo nivel, desalojo de hibernación automáticamente

INFO Executing [namedSqlQuery=dao.web_login, objs=[user1]] 
DEBUG org.springframework.orm.hibernate3.SessionFactoryUtils user1- Opening Hibernate Session 
DEBUG org.hibernate.impl.SessionImpl user1 - opened session at timestamp: 5511432318976000 
DEBUG org.hibernate.impl.SessionFactoryImpl user1- evicting second-level cache: USERS_LOOKUP 
DEBUG org.hibernate.impl.SessionFactoryImpl user1- evicting second-level cache: COUNTRY_LOOKUP 

ecache.xml

<cache name="query.oneHourPolicy" 
      maxElementsInMemory="10000" 
      eternal="false" 
      timeToLiveSeconds="3600" 
      diskPersistent="true" 
      overflowToDisk="true"/> 

configuración de hibernación resorte

<prop key="hibernate.cache.use_second_level_cache">true</prop> 
       <prop key="hibernate.cache.use_query_cache">true</prop> 
       <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.SingletonEhCacheProvider</prop> 
       <prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop> 
+0

¿Su CacheMode establecido como REFRESH (es decir, CacheMode.REFRESH) – Santosh

+0

No, escribí una clase junit para ejecutar las mismas consultas en la misma sesión sin el SQL aleatorio en el medio y va de 20 segundos a 1 segundo para obtener una respuesta – Rodriguez

+0

JUnit log 0st time - 20134 ms 1st time - 207 ms 2ª vez - 183 ms 3ª vez - 179 ms 4ª vez - 185 ms ejecutando consulta SQL aleatoria 5ª vez - 20043 ms 6ª vez - 182 ms 7ª vez - 181 ms 8ª vez - 177 ms 9ª vez - 179 ms – Rodriguez

Respuesta

3

conocer la Emisión Hibernate https://hibernate.onjira.com/browse/HHH-2224

Probé con el fuelle:

en mi consulta aleatoria

<sql-query name="random_write_query" callable="false"> 
     <synchronize table="USER"/> 
     <synchronize table="USER_ADDRESS"/> 
     {CALL PACKAGE.FUNCTION(?)} 
</sql-query> 

siempre que llame lo anterior y que es un cambio DB se invalidará sólo el caché sincronizada junto a la mesa = USUARIO o USER_ADDRESS

y sólo serán desalojados sincronizados consultas de lectura aleatoria o entidades

<sql-query name="random_read_query"> 
     <synchronize table="USER"/> 
     <synchronize table="USER_ADDRESS"/> 
     <return-scalar column="USERNAME" type="string"/> 
     <![CDATA[ 
      SELECT USERNAME FROM USER, USER_ADDRESS... 
     ]]> 
    </sql-query> 
Cuestiones relacionadas