Siempre que pase un objeto a save() update() o saveOrUpdate() y siempre que recupere un objeto utilizando load() get() list() iterate() o scroll() ese objeto se agrega al caché interno de la Session.

Cuando despues se llame a flush() el estado de ese objeto será sincronizado con la fundamento de datos. Si no desea que ocurra esta sincronización o si está procesando un número enorme de objetos y requiere gestionar la memoria eficientemente puede utilizar el método evict() para quitar el objeto y sus colecciones del caché de primer nivel.

ScrollableResult cats = sess.createQuery(from Cat as cat).scroll() //a huge result set
while ( cats.next() ) {
Cat cat = (Cat) cats.get(0)
doSomethingWithACat(cat)
sess.evict(cat)
}
La Session también ofrece un método contains() para decidir si una instancia pertenece al caché de la sesión.

Para expulsar todos los objetos del caché de sesión llame a Session.clear().

Para el caché de segundo nivel hay métodos definidos en SessionFactory para explusar el estado en caché de una instancia clase entera instancia de colección o rol entero de colección.

sessionFactory.evict(Cat.class catId) //evict a propia Cat
sessionFactory.evict(Cat.class) //evict all Cats
sessionFactory.evictCollection(Cat.kittens catId) //evict a propia collection of kittens
sessionFactory.evictCollection(Cat.kittens) //evict all kitten collections
El CacheMode controla la forma en que interactúa una sesión en propia con el caché de segundo nivel

CacheMode.NORMAL lee ítems desde y escribe ítems hacia el caché del segundo nivel
CacheMode.GET lee ítems del caché del segundo nivel. No escribe al caché de segundo nivel excepto cuando actualiza datos
CacheMode.PUT escribe ítems al caché de segundo nivel. No lee del caché de segundo nivel
CacheMode.REFRESH escribe ítems al caché de segundo nivel. No lee del caché de segundo nivel saltándose el resultado de hibernate.cache.use_minimal_puts forzando la actualización del caché de segundo nivel para todos los ítems leídos de la fundamento de datos
Para navegar por los contenidos de una región de caché de segundo nivel o de consultas use la API de Statistics

Map cacheEntries = sessionFactory.getStatistics()
.getSecondLevelCacheStatistics(regionName)
.getEntries()
Necesitará habilitar las estadísticas y opcionalmente forzar a Hibernate para que guarde las accesos del caché en un formato más fácil de comprender para humanos

hibernate.generate_statistics true
hibernate.cache.use_structured_entries true