2013-12-23 31 views
0

我正在使用hibernate 4.3MySQL 5.0.我試圖在我的示例中配置二級緩存,如下所示。無法在休眠4.x中配置二級緩存

hibernate.cfg.xml

<property name="hibernate.cache.use_second_level_cache">true</property> 
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> 

我的實體類

@Entity 
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY) 
@Cacheable 
public class Employee { ...} 

我得到以下異常

Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/service/jndi/JndiNameException 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 
at org.jboss.logging.Logger$1.run(Logger.java:2252) 
at java.security.AccessController.doPrivileged(Native Method) 
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2227) 
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214) 
at org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory.<clinit>(AbstractEhcacheRegionFactory.java:77) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source) 
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:242) 
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:125) 
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:87) 
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:46) 
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:83) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:223) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:197) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178) 
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:295) 
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2442) 
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2438) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1855) 
at com.example.hibernate.Hibernate4Main.main(Hibernate4Main.java:33) 
Caused by: java.lang.ClassNotFoundException: org.hibernate.service.jndi.JndiNameException 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.net.URLClassLoader$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
at java.lang.ClassLoader.loadClass(Unknown Source) 
... 22 more 

什麼是我的配置缺失?我知道hibernate 4.x中的二級緩存配置與3.x不同。我已經搜索過,但沒有得到我的工作答案。

感謝您的幫助。

回答

0

爲什麼你越來越java.lang.NoClassDefFoundError

1 Propbable原因)班是不是在Java類路徑可用。
2)您可能正在使用jar命令運行程序,並且未在清單文件的ClassPath屬性中定義類。
3)任何啓動腳本都重寫Classpath環境變量。

4)因爲NoClassDefFoundError是java.lang.LinkageError的子類,所以如果其中一個依賴項如本地庫可能不可用,它也會出現。

4)檢查日誌文件中的java.lang.ExceptionInInitializerError。由於靜態初始化失敗而導致的NoClassDefFoundError非常常見。

5)如果您在J2EE環境中工作比在多個Classloaders之間的可見性還會導致java.lang.NoClassDefFoundError。

+0

它不應該拋出這個異常,因爲我有所有需要的罐子,我使用的是Eclipse IDE。你知道任何URL我可以得到第二級緩存的例子爲休眠4.x. –

+0

您可能會在這裏找到答案http://stackoverflow.com/a/11832627/814074 – Sach