Hibernate:我如何解决java.lang.IncompatibleClassChangeError:

时间:2014-10-03 05:40:15

标签: java eclipse hibernate

这是我的第一个Hibernate实践,我得到了以下错误

 java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter

我将jar文件添加到项目库,但错误仍然存​​在。我正在使用Eclipse。

我如何解决这个问题,这与我的代码有关吗?或关于Eclipse中的设置?

这是我的hibernate示例

This is my hibernate example

hibernate configuration

错误

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

我添加了正确的jar,问题解决了,但是出现了新问题

Caused by: java.lang.IncompatibleClassChangeError: class net.sf.cglib.core.DebuggingClassWriter has interface org.objectweb.asm.ClassVisitor as super class

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

问题解决了,问题与jar文件cglibasm的版本有关。

现在,我用cglib 2.2.2asm 3.3.1

替换了罐子

现在,Mismatch已解决并获得输出。

答案 1 :(得分:1)

您是否在类路径中包含了cglib jar?

我认为这就是问题所在。

您可以从这里下载:

https://github.com/cglib/cglib/releases

答案 2 :(得分:0)

你的类路径需要cgLib,如果你使用的是maven,可以从这里下载:

http://mvnrepository.com/artifact/org.hibernate/hibernate-cglib-repack/2.1_3

这个类被hibernate用来创建与其他实体的惰性关系的代理对象,你可以在这里阅读更多相关内容:

http://java-success.blogspot.com/2012/09/understanding-hibernate-proxy-objects.html

答案 3 :(得分:0)

添加maven依赖项后问题已解决:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-cglib-repack</artifactId>
  <version>2.1_3</version>
</dependency>