2015-04-24 77 views
1

我正在学习如何配置Hibernate与EHCache但面临一些问题。问题与休眠EHCache程序

下面我有我的'hibernate.cfg.xml文件的详细信息:

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hib</property> 
     <property name="hibernate.connection.password">root</property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="show_sql">true</property> 
     <property name="hbm2ddl.auto">create</property> 
     <property name="hibernate.generate_statistics">true</property> 
     <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> 
     <property name="net.sf.ehcache.configurationResourceName">/ehcache.xml</property> 
     <mapping class="cache.three.Department"></mapping> 
    </session-factory> 
</hibernate-configuration> 

下面是我的ehcache.xml文件:

<cache 
    name="com.examples.domain.Country" 
    maxElementsInMemory="10000" 
    eternal="false" 
    timeToIdleSeconds="300" 
    timeToLiveSeconds="600" 
    overflowToDisk="true" 
/> 

我使用Hibernate-4.3.8版本。现在,当我运行我的程序,而只需使用这个配置我得到异常下面创建一个SessionFactory:

Initial SessionFactory creation failed.org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor] 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at example.HibernateUtil.buildSessionFactory(HibernateUtil.java:22) 
    at example.HibernateUtil.<clinit>(HibernateUtil.java:10) 
    at example.MyApp.storeData(MyApp.java:51) 
    at example.MyApp.main(MyApp.java:9) 
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.spi.CacheImplementor] 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:261) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:225) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:206) 
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:273) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1859) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1930) 
    at example.HibernateUtil.buildSessionFactory(HibernateUtil.java:17) 
    ... 3 more 
Caused by: org.hibernate.cache.CacheException: net.sf.ehcache.CacheException: Error configuring from file:/home/Hibernate/bin/ehcache.xml. Initial cause was Error configuring from input stream. Initial cause was null:8: Element <cache> does not allow attribute "maxElementsInMemory". 
    at org.hibernate.cache.ehcache.EhCacheRegionFactory.start(EhCacheRegionFactory.java:107) 
    at org.hibernate.internal.CacheImpl.<init>(CacheImpl.java:70) 
    at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:40) 
    at org.hibernate.engine.spi.CacheInitiator.initiateService(CacheInitiator.java:35) 
    at org.hibernate.service.internal.SessionFactoryServiceRegistryImpl.initiateService(SessionFactoryServiceRegistryImpl.java:91) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:251) 
    ... 9 more 

请告诉我,知道我在这个配置犯错?

更新:

在ehcache.xml中的文件与maxEntriesLocalHeap更换maxElementsInMemory抛出以下错误:

Caused by: org.xml.sax.SAXException: null:8: Element <cache> does not allow attribute "maxEntriesLocalHeap". 
+0

元素不允许属性“maxElementsInMemory”。你正在使用哪个版本的ehcache? – Marvin

+0

@Marvin,是的,我可以看到,但配置它的正确方式是什么,我无法得到。 – user3181365

+0

另外一个类路径问题,您还没有将hibernate jar部署到您的web-inf文件夹中 –

回答

3

的ehcache.xml中的文件应该是这样的:

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache> 

<defaultCache maxElementsInMemory="100" eternal="false" timeToIdleSeconds="120" timeToLiveSeconds="200" />  

<cache 
    name="com.examples.domain.Country" 
    maxElementsInMemory="10000" 
    eternal="false" 
    timeToIdleSeconds="300" 
    timeToLiveSeconds="600" 
    overflowToDisk="true" 
/> 
</ehcache> 

它应该从ehcache标记开始,并且您还需要声明一个defaultCache在里面。