40

使用 hibernate 5 部署 web 应用程序时遇到问题

Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
at org.hibernate.internal.NamedQueryRepository.checkNamedQueries(NamedQueryRepository.java:149) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.internal.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:759) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:490) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) [hibernate-core-5.0.0.CR2.jar:5.0.0.CR2]
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:372) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:454) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:439) [spring-orm-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570) [spring-beans-4.1.7.RELEASE.jar:4.1.7.RELEASE]
... 23 more

使用 Hibernate 4 一切正常。

我查看了第NamedQueryRepository149 行的类。该类以这种方式调用方法 debugf

        log.debugf( "Checking %s named HQL queries", namedQueryDefinitionMap.size() );

我看不到问题

这是我的依赖树

[INFO] ------------------------------------------------------------------------
[INFO] Building app Maven Webapp 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ app---
[INFO] +- org.springframework:spring-aspects:jar:4.1.7.RELEASE:compile
[INFO] |  \- org.aspectj:aspectjweaver:jar:1.8.6:compile
[INFO] +- org.springframework:spring-tx:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-beans:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-context-support:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-context:jar:4.1.7.RELEASE:compile
[INFO] |  \- org.springframework:spring-expression:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-core:jar:4.1.7.RELEASE:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.2:compile
[INFO] +- org.springframework:spring-orm:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-web:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-aop:jar:4.1.7.RELEASE:compile
[INFO] |  \- aopalliance:aopalliance:jar:1.0:compile
[INFO] +- org.springframework:spring-jdbc:jar:4.1.7.RELEASE:compile
[INFO] +- org.springframework:spring-test:jar:4.1.7.RELEASE:test
[INFO] +- junit:junit:jar:4.12:test
[INFO] |  \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] +- org.hibernate:hibernate-entitymanager:jar:5.0.0.CR2:compile
[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile
[INFO] |  +- org.hibernate:hibernate-core:jar:5.0.0.CR2:compile
[INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
[INFO] |  |  \- org.jboss:jandex:jar:1.2.2.Final:compile
[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
[INFO] |  +- org.hibernate.common:hibernate-commons-annotations:jar:5.0.0.Final:compile
[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
[INFO] |  +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile
[INFO] |  \- org.javassist:javassist:jar:3.18.1-GA:compile
[INFO] +- org.hibernate:hibernate-c3p0:jar:5.0.0.CR2:compile
[INFO] |  \- com.mchange:c3p0:jar:0.9.2.1:compile
[INFO] |     \- com.mchange:mchange-commons-java:jar:0.2.3.4:compile
[INFO] +- org.primefaces:primefaces:jar:5.2.RC3:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.2:compile
[INFO] \- net.sourceforge.jtds:jtds:jar:1.2.8:compile
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
4

15 回答 15

32

在 glassfish 这个问题是由 glassfish 模块的依赖冲突引起的。如果您检查 glassfishdir/modules 中的 lib 列表,您会看到 boss-logging.jar。您可以将其删除并替换为最新的,例如 org.jboss.logging:jboss-logging:jar:3.3.0.Final。它对我有用。

于 2015-12-06T22:35:51.610 回答
17

在我的例子中,罪魁祸首是 Jersey bean 验证器工件。由于某种原因,它的依赖项之一 bean-validation-2.4.0-b06.jar 包含 Jboss 日志记录类。我不得不从 spring-boot-starter-jersey 依赖项中排除 jersey-bean-validation 和 bean-validator 工件:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jersey</artifactId>
        <exclusions>
            <exclusion>
                <artifactId>jersey-bean-validation</artifactId>
                <groupId>org.glassfish.jersey.ext</groupId>
            </exclusion>
            <exclusion>
                <artifactId>bean-validator</artifactId>
                <groupId>org.glassfish.hk2.external</groupId>
            </exclusion>
        </exclusions>
    </dependency>

编辑:从 spring-boot 1.3.0 开始,这是固定的,不再需要上述排除项。

于 2015-08-28T20:04:17.160 回答
15

尝试升级jboss-logging.jar到更新的版本。您使用的那个似乎与 Hibernate 5 不兼容。

于 2015-07-21T18:51:43.003 回答
4

在 weblogic 服务器上部署 ear 时,我也遇到了此类问题。显然,weblogic 也使用 jboss 日志系统,并使用它的旧版本。
我的修复:
将“weblogic-application.xml”添加到 META-INF 文件夹,其中包含以下内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <weblogic-application>
        <prefer-application-packages>
            <package-name>org.jboss.logging.*</package-name>
        </prefer-application-packages>

        <prefer-application-resources>
            <resource-name>org/jboss/logging/Logger.class</resource-name>
        </prefer-application-resources>
    </weblogic-application>
于 2016-07-09T18:14:27.757 回答
3

我在使用 jersey-spring-3 和 hibernate 5.0.1.Final.Excluding org.glassfish.hk2.external:bean-validator from jersy-spring-3 并添加 org.glassfish.jersey.ext:jersey- 时遇到了同样的错误bean-validation 对我有用。这是我的最终依赖项。

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.22.2</version>
    <exclusions>
        <exclusion>
            <groupId>org.glassfish.hk2.external</groupId>
            <artifactId>bean-validator</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-bean-validation</artifactId>
    <version>2.22.2</version>
</dependency>

从 :

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.22.2</version>
</dependency>
于 2016-04-21T13:29:39.033 回答
2

您很可能在应用程序的类路径上有一个过时的 JBoss Logging JAR。这些...f方法是对 Logger API 的一个相对较新的补充。Hibernate 5 直接依赖于 Logging 版本 3.3.0,但您的某些人可能pom.xml对早期版本具有压倒性的依赖关系。另一种可能性是您正在部署到 JBoss 容器,其中日志 API 由容器提供。然后你可能需要升级 JBoss 服务器,或者引入一个变通方法来选择你的应用程序贡献的类。

于 2015-07-21T18:53:07.987 回答
2

检查我在NoSuchMethodError 的答案:org.jboss.logging.Logger.debugf

甚至我在升级到 Hibernate 5.2 后也遇到了问题,罪魁祸首是“jboss-logging 3.3.0.Final”,我在你的依赖项中也看到了它。按照答案中共享的链接上的步骤,您可以将依赖关系 jboss-logging 降低到具有所需功能的 3.2 级别。

于 2016-08-22T14:37:30.883 回答
1

我有同样的错误,它是通过首先添加jboss日志jar的依赖来解决的,如下所示

<!-- https://mvnrepository.com/artifact/org.jboss.logging/jboss-logging -->
<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.3.0.Final</version>
</dependency>

如果错误仍然存​​在,则将以下排除添加到 maven 依赖项中。

<dependency>
    <groupId>org.glassfish.jersey.ext</groupId>
    <artifactId>jersey-spring3</artifactId>
    <version>2.12</version>
     <exclusions>
            <exclusion>
                    <groupId>org.glassfish.hk2</groupId>
                    <artifactId>hk2</artifactId>
            </exclusion>
        </exclusions>
</dependency>

完成这两件事后,它对我来说很好。我希望它也对你有用。

于 2018-11-29T08:42:30.113 回答
1

我得到的错误是“

Application run failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

:::
:::
Caused by: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V"

我删除了 jboss-logging 文件夹 < .m2\repository\org\jboss\logging\jboss-logging> 并重新启动了 jboss 服务器。

罐子被加回,错误消失了。(在那之后我遇到了一些其他错误,但至少这个错误消失了)

于 2019-01-17T11:39:16.807 回答
1

在我的情况下,这个问题是由旧版本的 jboss-logging 引起的,它是来自 hibernate-ehcache 的传递依赖,我通过查看 maven 依赖树发现了它。我通过添加排除解决了它:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-ehcache</artifactId>
        <version>${hibernate.version}</version>
        <exclusions>
            <exclusion>
                <groupId>org.jboss.logging</groupId>
                <artifactId>jboss-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
于 2016-11-19T01:38:11.853 回答
0

JBoss 6.1+??

我在 jboss 的模块中为 jboss-logging-3.3.0.Final-redhat-1.jar 设置了 org.jboss.logging。

它对我有用。

,

于 2017-09-28T23:25:04.597 回答
0

您可以使用 Eclipse 找出导致问题的 jar:

  • 在类路径上设置一个包含所有 jar 的项目
  • 导航 -> 打开类型...
  • 输入org.jboss.logging.Logger

这将为您提供包含该类的 jar 列表。其中之一已过时,需要排除(有关此变化,请参阅其他答案)。

于 2019-05-02T04:49:34.847 回答
0

如果依赖项包括

<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.6.2</version>
</dependency>

exclusions使用 中的元素将其排除在外dependency

于 2016-08-18T21:49:32.397 回答
0

我对 spring4.2.1+hibernate5.0.2+jersey2.23.1 有同样的问题。我的解决方案是一样的:排除org.glassfish.hk2.external:bean-validatorjersy-spring-3添加org.glassfish.jersey.ext:jersey-bean-validation.

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-spring3</artifactId>
  <version>2.23.1</version>
  <exclusions>
    <exclusion>
      <groupId>org.glassfish.hk2.external</groupId>
      <artifactId>bean-validator</artifactId>
    </exclusion>
  </exclusions>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-bean-validation</artifactId>
  <version>2.23.1</version>
</dependency>

在我的产品环境中,只需删除bean-validator-2.4.0-b34.jar和添加jersey-bean-validation-2.23.1.jar

于 2016-07-28T08:43:40.877 回答
0

我也遇到过这个问题。这就是为我解决的问题

       <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.2.1.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
于 2016-02-02T09:33:43.277 回答