升级到Hibernate 3.3.2后出现java.lang.AbstractMethodError错误

升级到Hibernate 3.3.2后出现java.lang.AbstractMethodError错误,java,hibernate,maven,jboss5.x,javassist,Java,Hibernate,Maven,Jboss5.x,Javassist,我们有一个使用Hibernate 3.0.5的遗留应用程序,我们正在尝试将其升级到Hibernate 3.3.2(对当前代码影响较小的版本) 更新pom.xml中的依赖项后,应用程序将正确部署,但在存在惰性关联的查询中,会发生以下错误: java.lang.AbstractMethodError:org.hibernate.proxy.pojo.javassist.javassistlazinitializer.setUnwrap(Z)V 依赖项的配置如下所示: <dependency&g

我们有一个使用Hibernate 3.0.5的遗留应用程序,我们正在尝试将其升级到Hibernate 3.3.2(对当前代码影响较小的版本)

更新
pom.xml
中的依赖项后,应用程序将正确部署,但在存在惰性关联的查询中,会发生以下错误:

java.lang.AbstractMethodError:org.hibernate.proxy.pojo.javassist.javassistlazinitializer.setUnwrap(Z)V

依赖项的配置如下所示:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>3.3.2.GA</version>
  <exclusions>
    <!-- 
      Excludes to avoid conflict with JBoss libs
      See http://stackoverflow.com/questions/3413488/saxparser-errors-with-hibernate-and-jboss-conflicting-versions
     -->
    <exclusion>
      <groupId>xml-apis</groupId>
      <artifactId>xml-apis</artifactId>
      <version>1.0.b2</version>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-simple</artifactId>
  <version>1.5.2</version>
</dependency>
<dependency>
  <groupId>javassist</groupId>
  <artifactId>javassist</artifactId>
  <version>3.4.GA</version>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.14</version>
</dependency>

org.hibernate
)

    我遇到了一个与此非常类似的问题,结果是JBoss类加载器问题。JBoss的配置从一个版本到下一个版本变化很快,我提议的解决方案对我使用JBoss EAP 5.1.2非常有效。

    来吧

    首先,确保在POM中明确包含Hibernate版本:

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>3.3.2.GA</version>
    </dependency>
    
    其中
    my application.war
    是war文件的名称。请注意,
    java2ParentDelegation
    设置为false可能有助于解决其他类加载器问题(以我的经验来看,尤其是slf4j)

    最后,JBoss 5.1.x类加载器问题需要处理,因此我希望这能有所帮助。要记住的是,这个问题本身并不是与JavaScript有关的(你可以考虑在你的POM中删除显式的JavaSudio>代码> <代码>,让Maven根据Hibernate <代码> <代码>解析它。这很可能是类加载器问题。默认的JBoss类加载策略在大多数情况下都非常有效,直到您使用HibernateJBoss第6版之前的版本与JBoss附带的特定版本的Hibernate有着紧密的联系,因此尝试使用不同于JBoss想要使用的版本的Hibernate是一件非常痛苦的事情。但这是可以做到的

    对于EAR文件,该文件名为
    jboss app.xml
    ,位于EAR文件的
    META-INF
    文件夹中:

    <jboss-app>
      <loader-repository> 
      org.hibernate:archive=my-application.ear 
         <loader-repository-config> 
         java2ParentDelegation=false 
         </loader-repository-config> 
      </loader-repository>
    </jboss-app>
    
    
    org.hibernate:archive=my-application.ear
    java2ParentDelegation=false
    

    祝你好运

    你在用JBoss吗?如果没有,什么应用服务器?我以前见过这个问题(主要是JBoss),但在提供任何具体指导之前,我想知道这个问题。这是“完整”的错误信息吗
    java.lang.AbstractMethodError:org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.setUnwrap(Z)V
    @JStevenPerry,在这个问题上添加了JBoss版本。我猜这是由ASM JAR冲突引起的,CGLIB依赖于ASM。CGLIB的解决方案是一个专用的CGLIB-nodep.jar,它包括正确的ASM版本和重命名的包。@jabliuka、
    ASM
    CGLIB
    不作为依赖项包含。此外,根据Hibernate 3.3,默认值现在是
    javassist
    ,尽管配置正确,错误仍会继续。我启用了JBoss类加载日志,使用的JAR(javassist、hibernate核心)显然是WEB-INF/lib中的JAR。我不完全确定您在说什么。你能澄清一下吗?JAR在
    WEB-INF/lib
    中,但是
    jboss WEB.xml
    文件需要进入
    WEB-INF
    中。对不起,我在一句话中混合了两个答案。我做了您在
    jboss web.xml
    中建议的配置,还删除了
    pom.xml
    中显式的
    javassist
    依赖项,但它不起作用。所以我注意到
    $JBOSS_HOME/lib
    中有一个
    javassist.jar
    ,我认为它没有被加载(因为它被配置为不从父级加载),并在POM中显式声明了它。日志确认jar是从
    WEB-INF/lib
    读取的,但我收到了相同的错误消息。EAP5.1中的JBoss类加载绝对是地狱般的。很抱歉,我的建议对您不起作用。最奇怪的是JBoss附带的3.3.1版本工作得很好。无论如何谢谢你的帮助!
    <jboss-app>
      <loader-repository> 
      org.hibernate:archive=my-application.ear 
         <loader-repository-config> 
         java2ParentDelegation=false 
         </loader-repository-config> 
      </loader-repository>
    </jboss-app>