cache and hibernate orm ehcache jpa-2.0 second-level-cache

and - ¿Cómo configurar JPA 2.0 con Hibernate 3.5.2 para usar EHCache como caché de nivel 2 y caché de consulta?



spring cache vs hibernate cache (2)

Encontré algunas instrucciones sobre cómo configurar la hibernación pura para usar EHCache. Pero no puedo encontrar instrucciones sobre cómo configurar el EntityManager JPA2.0 para usar el caché. Hibernate 3.5.2 es mi proveedor JPA2.0.

La forma en que configura el proveedor de caché L2 con JPA es similar a Hibernate sin formato.

De forma predeterminada, Hibernate 3.5 se incluye con EhCache 1.5 (consulte Configuración de Ehcache como caché de segundo nivel ) y si desea usar el proveedor de caché oficial proporcionado por Hibernate (en hibernate-ehcache si está usando Maven), declare:

<!-- This is the provider for Ehcache provided by Hibernate, using the "old" SPI --> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>

Si desea usar EhCache 2.x, deberá usar el proveedor proporcionado por EhCache que es compatible con el nuevo SPI Hibernate 3.3 / 3.5 con su CacheRegionFactory ). Utilizar:

<!-- The region factory property is the "new" property (for Hibernate 3.3 and above) --> <property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.EhCacheRegionFactory">

por ejemplo, la creación, o

<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>

para forzar a Hibernate a usar un singleton de Ehcache CacheManager.

Y luego activar el almacenamiento en caché L2 y el almacenamiento de consultas:

<property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_query_cache" value="true"/>

Eso es para la configuración de caché Hibernate L2.

¿Es @Cacheable (verdadero) suficiente para la entidad? ¿O debería usar @ org.hibernate.annotations.Cache para configurar la entidad?

En teoría, se supone que @Cacheable es un reemplazo de la anotación de propiedad de Hibernate y se debe usar junto con el elemento de shared-cache-mode :

<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="FooPu" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> ... <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> ... </properties> </persistence-unit> </persistence>

Pero como se mencionó en esta pregunta anterior , la experimentación inicial no ha sido exitosa (podría estar relacionada con HHH-5303 , no puedo decir que no investigué mucho). Así que sugiero seguir con las anotaciones propietarias.

Referencias

  • Guía de referencia de Hibernate EntityManager
    • 2.2.1 Embalaje
  • Especificación JPA 2.0
    • Sección 3.7.1 "El elemento de modo caché compartido"
    • Sección 11.1.7 "Anotación en caché"

Recursos

Pregunta relacionada

  • Cómo utilizar @Cacheable de JPA2 en lugar de @Cache de Hibernate

Encontré algunas instrucciones sobre cómo configurar la hibernación pura para usar EHCache. Pero no puedo encontrar instrucciones sobre cómo configurar el EntityManager JPA2.0 para usar el caché. Hibernate 3.5.2 es mi proveedor JPA2.0.

editar // ¿Es @Cacheable(true) suficiente para la entidad? ¿O debería usar @org.hibernate.annotations.Cache para configurar la entidad?


en persistence.xml puede especificar esta propiedad:

<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory" />

y para hacerlo activo:

<property name="hibernate.cache.use_second_level_cache" value="true" />