hibernate.cache.region.factory_class 在 hibernate.cfg.xml 中是必需的

Posted

技术标签:

【中文标题】hibernate.cache.region.factory_class 在 hibernate.cfg.xml 中是必需的【英文标题】:hibernate.cache.region.factory_class Required in hibernate.cfg.xml 【发布时间】:2012-07-05 16:52:08 【问题描述】:

我正在使用 memcache 作为 Hibernate 的二级缓存。我正在使用 hibernate-memcached-1.2.4、spymemcached 2.8.0 和 hibernate 4.1.4。

但是当我尝试使用它时,它给了我一个错误提示

初始会话工厂创建失败org.hibernate.cache.NoCacheRegionFactoryAvailableException:应用程序中使用了二级缓存,但没有给出属性hibernate.cache.region.factory_class,请禁用二级缓存或将正确的区域工厂类名称设置为属性hibernate .cache.region.factory_class(并确保二级缓存提供程序,例如,hibernate-infinispan,在类路径中可用)。 线程“主”java.lang.ExceptionInInitializerError 中的异常 在 Util.HibernateUtil.(HibernateUtil.java:16) 在 hibba.AccountDAOimpl.getAccount(AccountDAOimpl.java:23) 在 hibba.Connect.main(Connect.java:7) 原因:org.hibernate.cache.NoCacheRegionFactoryAvailableException:应用程序中使用了二级缓存,但没有给出属性hibernate.cache.region.factory_class,请禁用二级缓存或将正确的区域工厂类名称设置为属性hibernate .cache.region.factory_class(并确保二级缓存提供程序,例如,hibernate-infinispan,在类路径中可用)。 在 org.hibernate.cache.internal.NoCachingRegionFactory.buildTimestampsRegion(NoCachingRegionFactory.java:87) 在 org.hibernate.cache.spi.UpdateTimestampsCache.(UpdateTimestampsCache.java:63) 在 org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:510) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1744) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1782) 在 Util.HibernateUtil.(HibernateUtil.java:12) ... 2 更多

hibernate.cfg.xml中写的属性是:

<pre>
<property name="hibernate.cache.use_query_cache">true</property>
<property name="cache.provider_class">com.googlecode.hibernate.memcached.MemcachedCacheProvider </property>
        <property name="hibernate.memcached.memcacheClientFactory">com.googlecode.hibernate.memcached.dangamemcached.DangaMemcacheClientFactory</property>      
        <property name="hibernate.Memcached.servers"> localhost:11211 </property>
        <property name="hibernate.Memcached.cacheTimeSeconds">300</property>
        <property name="hibernate.Memcached.connectionFactory">KetamaConnectionFactory</property> </pre>

【问题讨论】:

***.com/questions/13882393/ehcache-hibernate-4/… 【参考方案1】:

这个例外是不言自明的。您必须设置 *hibernate.cache.region.factory_class* 属性。例如,使用 ehcache 将添加以下行:

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

【讨论】:

-这是为 ehcache 准备的……但我使用的是 memcached,问题是 hibernate-memcached 不提供区域工厂类。 Kcarlson @github 试图做一个,但我找不到任何罐子...... @AnilKrShokeen 你有想过吗?我很想知道。我目前也陷入困境。 net.sf.ehcache.hibernate.EhCacheRegionFactory 用于 Hibernate 3。对于 Hibernate 4,请使用 &lt;property name="hibernate.cache.region.factory_class"&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory&lt;/property&gt;。详情见ehcache.org/documentation/2.8/integrations/hibernate【参考方案2】:

在使用 hibernate-memcached 1.3 和 spymemcached 2.7 和 hibernate 4.3 时遇到了同样的问题。必须切换到提供RegionFactory 的hibernate4-memcached。

【讨论】:

以上是关于hibernate.cache.region.factory_class 在 hibernate.cfg.xml 中是必需的的主要内容,如果未能解决你的问题,请参考以下文章