¿Cómo puedo desactivar el caché de segundo nivel de algunas entidades determinadas en hibernación sin cambiar anotaciones

StackOverflow https://stackoverflow.com/questions/934133

Pregunta

Estoy usando Hibernate caché de segundo nivel en mi solicitud, por cierta razón de negocios en No puedo cambiar la anotación entidad más .

En mi proyecto, además de cambiar la base de datos de Hibernate, existen también otros SQL nativo que no pasan por Hibernate. Por lo tanto, los datos de la caché de segundo nivel Hibernate podría ser rancio después de la base de datos se actualiza desde SQL nativo. Es por eso que quiero para desactivar la memoria caché de segundo nivel para ciertas entidades (mediante programación o de otra manera que el cambio de anotación).

Gracias de antemano!

¿Fue útil?

Solución

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 efectivamente provoca un efecto contrario - establece un tamaño ilimitado para la memoria caché. Este comportamiento no se menciona en la rel="nofollow página Hibernate almacenamiento en caché pero se documenta en página de configuración de caché .

He revisado la documentación de forma rápida y no he encontrado enfoque alternativo todavía. Soy incapaz de eliminar esta respuesta por mí mismo. : - (

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

Hibernate almacenamiento en caché en la documentación Ehcache.

Otros consejos

En terracota 3.1 y superior, se puede activar / desactivar la hibernación segundo nivel cachés en función de cada región, tanto en la configuración (estáticamente) y en tiempo de ejecución, utilizando la Consola de terracota desarrollador.

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

terracota es de código abierto. Para más detalles, echa un vistazo a terracota por Hibernate .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top