2009-06-01 15 views
5

Estoy usando la memoria caché de segundo nivel de Hibernate en mi aplicación, por algún motivo comercial No puedo cambiar la anotación de entidad más.Cómo puedo deshabilitar la memoria caché de segundo nivel de ciertas entidades en Hibernate sin cambiar las anotaciones

En mi proyecto, además de cambiar la base de datos de Hibernate, existen otros SQL nativos que no pasan por Hibernate. Por lo tanto, los datos de caché de segundo nivel de Hibernate podrían estar obsoletos después de actualizar la base de datos desde SQL nativo. Es por eso que quiero para desactivar el caché de segundo nivel para ciertas entidades (programáticamente o de otra manera que cambiar la anotación).

¡Gracias de antemano!

Respuesta

7

ADVERTENCIA: Como se señaló Jens Schauder, es imposible configurar Ehcache para almacenar 0 elementos en la memoria mediante el establecimiento de maxElementsInMemory = "0", ya que causa efectivamente efecto contrario - establece un tamaño ilimitado para la memoria caché. Este comportamiento no se menciona en la página Hibernate Caching, pero está documentado en la página Cache Configuration.

He revisado rápidamente la documentación y todavía no he encontrado un enfoque alternativo. No puedo eliminar esta respuesta yo solo. :-(

Mi sugerencia original:.

puede configurar el proveedor de la aplicación de caché de segundo nivel a tiempos cortos de TTL y/o para almacenar 0 entradas de especial tipo de entidad

Por ejemplo, si está utilizando el Ehcache, puede configurarlo en ehcache.xml: *

<cache 
name="com.problematic.cache.EntityName" 
maxElementsInMemory="0" <<== this should effectively disable caching for EntityName 
overflowToDisk="false" <<== Do not overflow any entries to disk 
/> 

Ver Hibernate Caching en la documentación Ehcache

.
+0

Gracias Matej, ¡creo que esta es exactamente la respuesta que quería! Tengo otro problema, mi ehcache.xml se coloca en la ruta de clase de mi proyecto ejecutable mientras que la clase de entidad se coloca en otro proyecto de entidad. Parece que Hibernate solo lee la configuración de caché predeterminada de mi ehcache.xml. que es: Hibernate no ha leído mi otra entidad la configuración de caché en ehcache.xml. –

+0

Creo que en el , el atributo de nombre no es mal colocada de modo que la hibernación puede use lea esta configuración y use la predeterminada. ¿Qué debo escribir en el atributo de nombre? –

+0

Hibernate identifica caché para el objeto por su nombre de entidad. De forma predeterminada, el nombre de clase se utiliza como nombre de entidad, pero se puede cambiar en los archivos de asignación de Hibernate (o anotaciones). Si no ha cambiado el nombre de la entidad en el mapeo de Hibernate, simplemente debe usar el nombre de clase totalmente calificado. De lo contrario, utilice el nombre de entidad (simbólico) explícitamente especificado en el mapeo de Hibernate. – Matej

1

En Terracotta 3.1 y superior, puede habilitar/deshabilitar las memorias caché de segundo nivel de Hibernate por región, tanto en la configuración (estáticamente) como en tiempo de ejecución, utilizando la Consola de desarrollador de Terracotta.

También puede controlar en tiempo real las estadísticas sobre la memoria caché y Hibernate, para nodos individuales en un clúster o en todo el clúster.

Terracotta es de código abierto. Para obtener más información, consulte Terracotta for Hibernate.

Cuestiones relacionadas