我找到了一些说明,说明如何配置纯hibernate模式以使用EHCache。但是我找不到任何有关如何配置JPA2.0 EntityManager以使用缓存的说明。Hibernate 3.5.2是我的JPA2.0提供程序。
编辑// @Cacheable(true)对实体足够了吗?还是应该使用@org.hibernate.annotations.Cache配置实体?
@Cacheable(true)
@org.hibernate.annotations.Cache
使用JPA配置L2缓存提供程序的方式与原始Hibernate类似。
默认情况下,Hibernate 3.5随EhCache 1.5一起提供(请参阅将Ehcache配置为第二级缓存),如果您想使用Hibernate提供的 官方 缓存提供程序(hibernate-ehcache如果使用的是Maven),请声明:
hibernate-ehcache
<!-- This is the provider for Ehcache provided by Hibernate, using the "old" SPI --> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
如果要使用EhCache 2.x,则需要使用EhCache提供的提供程序,该提供程序支持带有的 新 Hibernate 3.3 / 3.5 SPI CacheRegionFactory。采用:
CacheRegionFactory
<!-- 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">
例如创建,或
<property name="hibernate.cache.region.factory_class" value="net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory"/>
强制Hibernate使用单身的Ehcache CacheManager。
然后激活L2缓存和查询缓存:
<property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.use_query_cache" value="true"/>
这用于Hibernate L2缓存设置。
@Cacheable(true)是否足以用于实体?还是应该使用@ org.hibernate.annotations.Cache配置实体?
从理论上讲,@Cacheable应当替代Hibernate专有注释,并且应与shared-cache-mode元素结合使用:
@Cacheable
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>
但是,正如前面的问题中提到的那样,初始实验并未成功(它可能与HHH-5303有关,我不能说,我没有做太多研究)。因此,我建议坚持使用专有注释。