2010-11-15 18 views

Respuesta

11

¿Te refieres a la memoria caché de primer nivel o la memoria caché de segundo nivel? Tener un caché de segundo nivel Hibernate como Ehcache que almacena en caché las entidades que corresponden a las filas en la misma tabla que modifica manualmente podría causar el comportamiento que usted describe. El caché de primer nivel no causaría este comportamiento, y no creo que puedas desactivarlo, de todos modos.

Para deshabilitar la memoria caché de segundo nivel de Hibernate, elimine del archivo de configuración de Hibernate, hibernate-cfg.xml, todas las líneas que hacen referencia a la memoria caché de segundo nivel. Por ejemplo:

<!-- Enable the second-level cache --> 
<property name="hibernate.cache.provider_class"> 
    net.sf.ehcache.hibernate.EhCacheProvider 
</property> 
<property name="hibernate.cache.region.factory_class"> 
    net.sf.ehcache.hibernate.EhCacheRegionFactory 
</property> 
<property name="hibernate.cache.use_query_cache">true</property> 
<property name="hibernate.cache.use_second_level_cache">true</property> 
<property name="hibernate.cache.use_structured_entries">true</property>  
<property name="hibernate.cache.generate_statistics">true</property> 
+0

Hola Derek, gracias o tus respuestas! Hm, parece que no tengo un caché de segundo nivel, ¿tal vez para tratar de eliminar el 1er nivel? ¿Cómo puedo hacer esto? – gennad

+0

Por lo que yo sé, no puede deshabilitar la memoria caché de primer nivel, pero de acuerdo con http://stackoverflow.com/questions/3943366/how-can-i-configure-hibernate-to-immediately-apply-all-saves -updates-and-delete/3946939 # 3946939, Spring puede habilitar el enjuague ansioso de la memoria caché de primer nivel, lo que efectivamente lograría el mismo resultado. –

-1

puede utilizar hints.put ("javax.persistence.cache.retrieveMode", CacheRetrieveMode.BYPASS); en su método persist() puede funcionar.

1

Para "intentar" desactivar el caché de primer nivel, lo desalojo cada vez que se solicita un EntityManager. funcionó para mí;)

public EntityManager getEntityManager(){ 
     if(emf == null){ 
      if (parameters == null) { 
       emf = Persistence.createEntityManagerFactory(persistenceUnitName); 
      } else { 
       emf = Persistence.createEntityManagerFactory(persistenceUnitName, parameters); 
      } 
     } else { 
      emf.getCache().evictAll(); 
     } 

     EntityManager em = emf.createEntityManager(); 
     return em; 
    } 
+1

Gracias, esto funcionó para mí. – CrushedPixel

Cuestiones relacionadas