休眠:我怎样才能解决java.lang.IncompatibleClassChangeError:
问题描述:
这是我的第一个Hibernate的实践中,我得到了以下错误休眠:我怎样才能解决java.lang.IncompatibleClassChangeError:
java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
我添加的jar文件到项目库,但错误依然存在。我正在使用Eclipse。
我该如何解决这个问题,这是否与我的代码有关?或关于Eclipse中的设置?
这是我的休眠例如
错误
Caused by: java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
at org.hibernate.bytecode.cglib.BytecodeProviderImpl.getProxyFactoryFactory(BytecodeProviderImpl.java:33)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactoryInternal(PojoEntityTuplizer.java:182)
at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:160)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:269)
at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:425)
at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:109)
at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:55)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:226)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1218)
at com.hib.anoop.ManageEmployee.main(ManageEmployee.java:20)
Caused by: java.lang.ClassNotFoundException: net.sf.cglib.proxy.CallbackFilter
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)
... 13 more
我加入了正确的罐子,解决了这个问题,但新的问题发生如下
Caused by: java.lang.IncompatibleClassChangeError: class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class
我该如何解决这个问题?
答
问题解决了,问题涉及到的版本jar文件cglib
和asm
。
现在,我与cglib 2.2.2
和asm 3.3.1
取代了罐子现在,不匹配解决,并得到输出。
答
你需要在你的classpath CGLIB,如果你正在使用maven,你可以从这里下载:
http://mvnrepository.com/artifact/org.hibernate/hibernate-cglib-repack/2.1_3。
这个类由休眠到你懒的关系的其他实体创建代理对象,你可以阅读更多关于它在这里:
http://java-success.blogspot.com/2012/09/understanding-hibernate-proxy-objects.html
答
问题将Maven的依赖后解决:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-cglib-repack</artifactId>
<version>2.1_3</version>
</dependency>
该错误意味着它不能找到你的classpath的类。您可能已将其添加到项目中,但是您确定您的类路径在运行时已正确设置?你是在IDE还是打包的jar文件中运行? – 2014-10-03 05:43:57
我使用Eclipse,并作为java应用程序运行,将jar文件添加到库中。 – Anptk 2014-10-03 05:57:16