【问题标题】:Hibernate: How can i resolve java.lang.IncompatibleClassChangeError:休眠:如何解决 java.lang.IncompatibleClassChangeError:
【发布时间】:2014-10-03 05:40:14
【问题描述】:

这是我的第一次 Hibernate 实践,我收到以下错误

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

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

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

这是我的休眠示例

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

我该如何解决这个问题?

【问题讨论】:

  • 该错误意味着它无法在您的类路径中找到该类。您可能已将其添加到项目中,但您确定在运行时您的类路径设置正确吗?您是在 IDE 中运行还是在打包的 jar 文件中运行?
  • 我正在使用 Eclipse,并作为 java 应用程序运行,将 jar 文件添加到库中。

标签: java eclipse hibernate


【解决方案1】:

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

现在,我用cglib 2.2.2asm 3.3.1 替换了罐子

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

【讨论】:

    【解决方案2】:

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

    我认为这就是问题所在。

    你可以从这里下载:

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

    【讨论】:

      【解决方案3】:

      你的类路径需要 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

      【讨论】:

        【解决方案4】:

        添加maven依赖后问题解决:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-04-03
          • 2013-01-31
          • 2018-01-09
          • 2012-02-01
          • 2018-11-22
          • 2011-04-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多