2010-05-06 14 views
9

Sto creando un servizio che ha accesso in sola lettura al database. Ho una cache di query e una cache di secondo livello abilitata (modalità READ_ONLY) in Hibernate per accelerare il servizio, poiché le tabelle a cui si accede cambiano raramente.La cache di query di ibernazione viene aggiornata automaticamente su un aggiornamento esterno?

La mia domanda è, se qualcuno entra nel DB e cambia le tabelle manualmente (cioè fuori da Hibernate), la cache riconosce automaticamente che deve essere cancellata? C'è un limite di tempo nella cache?

risposta

7

No, la cache non esegue la scansione del database per aggiornarsi magicamente quando i dati sottostanti cambiano. Le modifiche che non provengono dalla cache L2 non appariranno in essa. Il tempo necessario per il timeout, ecc. Dipende dal provider e dalle impostazioni predefinite. Sembra che l'ehcache.xml predefinito sia per 2 minuti.

7

Se non si passano attraverso le API di Hibernate per apportare le modifiche, la cache di secondo livello non verrà notificata e le modifiche non saranno visibili. Il solito modo di gestire questa situazione è di rimuovere gli oggetti corrispondenti dalla cache di secondo livello in modo programmatico per forzare un aggiornamento. Il SessionFactory fornisce metodi che consentono di farlo. Dalla sezione 19.3. Managing the caches della documentazione:

Per la cache di secondo livello, ci sono metodi definiti sulla SessionFactory per sfrattando lo stato della cache di un esempio, tutta la classe, la raccolta istanza o dell'intero ruolo di raccolta.

sessionFactory.evict(Cat.class, catId); //evict a particular Cat 
sessionFactory.evict(Cat.class); //evict all Cats 
sessionFactory.evictCollection("Cat.kittens", catId); //evict a particular 
                 //collection of kittens 
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections 
+0

In un'applicazione web, al punto di tempo/in base a quali condizioni, sarà questo codice per sfratto essere chiamato? Puoi per favore dare uno scenario pratico? – user104309

Problemi correlati