【问题标题】:java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;I)Vjava.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;I)V
【发布时间】:2016-02-09 06:41:57
【问题描述】:

我有一个简单的@Singletonwhitin Java EE 项目,它解析来自互联网的数据并使用 Hibernate 将其保存到 PostgreSQL。

@Startup
@Singleton
public class PSNDBB {
 
    @PostConstruct
    public void Parser(){

    //getting data

    SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
    Session session=sessionFactory.openSession();
    session.beginTransaction();
    
    for(Object obj : array){
        GameData game=new GameData();
        session.save(game);
    }
    
    session.getTransaction().commit();      
    session.close();
    }
}

但我明白了

Caused by: java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;I)V
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:87)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:692)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
    at org.showgazer.psn.PSNDBB.Parser(PSNDBB.java:84)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at com.sun.ejb.containers.interceptors.BeanCallbackInterceptor.intercept(InterceptorManager.java:1035)
    at com.sun.ejb.containers.interceptors.CallbackChainImpl.invokeNext(CallbackChainImpl.java:72)
    at com.sun.ejb.containers.interceptors.CallbackInvocationContext.proceed(CallbackInvocationContext.java:205)
    ... 70 more

指向

SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();

但是hibernate.cfg.xml 在 Java SE 项目中运行良好,在 Java EE 中我遇到了这个错误。我使用的所有 JAR 都在 /WEB-INF/lib 中。 hibernate.cfg.xml 位于 src 文件夹和 /WEB-INF 文件夹中。而且我使用 GlassFish 没有任何容器和构建工具,我认为这很糟糕,但我需要知道这个简单示例中哪里出错了。

【问题讨论】:

  • 我也有同样的问题。但仅限于 GlassFish。 Tomcat 工作正常。
  • 从休眠 5 切换到 4 修复了这个错误,所以我认为它的原因是一些旧的 GlassFish JPA jar 指向休眠核心中不再存在的方法。

标签: hibernate jakarta-ee glassfish


【解决方案1】:

我通过从项目的 lib 文件夹中删除 jboss-logging jar 文件并将 jboss-logging.jar 从 glassfish\modules 文件夹替换为 http://mvnrepository.com/artifact/org.jboss.logging/jboss-logging/3.3.0.Final 的最新版本来解决了这个问题

【讨论】:

  • 您的 CoreMessageLogger 没有 debugf 方法...您确定要在所有地方替换 jar 文件吗?检查版本运行时。
  • 是的,我从 lib 中删除了 jboss,并从 glassfish 更新了 jboss。你说你不考虑org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V
  • 我确定 Glassfish 的 jboss.logging 版本错误。所以会出现这个错误。查找 jboss.logging glassfish 加载的内容并检查其中是否有 debugf 方法
  • 不要忘记重新启动 glassfish,它对我有用,但感觉有点“脏”我尝试在我的 pom 中指定依赖项,但它仍在使用 glassfish 提供的依赖项,我会真的很喜欢有一个“更清洁”的解决方案,我不认为挖掘 glassfish 的内脏是正确的方法,如果有人找到更好的解决方案,我会很感激他们让我知道
【解决方案2】:

应用服务器中包含的日志库与 Hibernate 所需的日志库之间似乎存在版本不匹配。

我遇到了同样的问题,我的配置是:Jboss AS 7.1.1.Final 和 Hibernate 5.1.0 我解决了排除 jboss-deployment-structure.xml 中的 jboss 日志记录模块

    <jboss-deployment-structure>
        <deployment>
            <!-- ADDED -->
            <exclusions>
                <module name="org.hibernate" /> <!-- Escludo l'Hibernate integrato in jboss e uso quello interno -->
                <module name="org.jboss.logging" /> <!-- Escludo li logger integrato in jboss -->
            </exclusions>
            <!-- FINE ADDED -->
            <dependencies>
            </dependencies>
        </deployment>
    </jboss-deployment-structure>

【讨论】:

    【解决方案3】:

    解决所有这些令人抓狂的版本兼容性问题的灵丹妙药,就是使用 Spring IO 平台

    http://platform.spring.io/platform/

    通过 Maven 或 Gradle 对 Spring 中的所有内容进行依赖管理。

    (在此之后,您不必费力地担心神秘的版本问题,而典型的开发人员在更新或添加项目时每隔几个月就必须跟踪并忍受这些问题)。

    另请注意:您还需要确保所有模块(在多模块项目中)共享相同的版本号。这听起来很明显,但在添加模块时可能会忘记这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-26
      • 2016-02-07
      • 2020-03-28
      相关资源
      最近更新 更多