2010-11-15 11 views

risposta

11

Intendi la cache di primo livello o la cache di secondo livello? Avere una cache di secondo livello come Ehcache che memorizza nella cache le entità che corrispondono alle righe nella stessa tabella che si modifica manualmente potrebbe causare il comportamento che si descrive. La cache di primo livello non causerebbe questo comportamento e, comunque, non penso che tu possa disabilitarlo.

Per disabilitare la cache di secondo livello di Ibernazione, rimuovere dal file di configurazione di sospensione, hibernate-cfg.xml, tutte le righe che fanno riferimento alla cache di secondo livello. Per esempio:

<!-- 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

Ciao Derek, grazie o le vostre risposte! Hm, sembra che non abbia il caching di secondo livello, forse per provare a rimuovere il primo livello? Come posso fare questo? – gennad

+0

Per quanto ne so, non è possibile disabilitare la cache di primo livello, ma in base a http://stackoverflow.com/questions/3943366/how-can-i-configure-hibernate-to-immediately-apply-all-saves -aggiornamenti-e-cancella/3946939 # 3946939, Spring può abilitare lo sciacquo colossale della cache di primo livello, che effettivamente raggiungerebbe lo stesso risultato. –

-1

è possibile utilizzare hints.put ("javax.persistence.cache.retrieveMode", CacheRetrieveMode.BYPASS); nel metodo persist() potrebbe funzionare.

1

Per "provare" a disabilitare la cache di primo livello, la sfratto ogni volta che viene richiesto un EntityManager. ha funzionato per me;)

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

Grazie, questo ha funzionato per me. – CrushedPixel

Problemi correlati