我正在学习如何使用EHCache配置Hibernate但面临一些问题。
我的`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文件中用maxElementsInMemory
替换maxEntriesLocalHeap
会导致错误:
Caused by: org.xml.sax.SAXException: null:8: Element <cache> does not allow attribute "maxEntriesLocalHeap".
答案 0 :(得分:4)
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
。