You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:WildFly27+Jakarta EE10配置PostgreSQL13数据源遇Hibernate6.0.2启动错误

WildFly + PostgreSQL + Hibernate 6.0.2 配置错误解决

问题背景

需在WildFly中配置PostgreSQL数据源,用于Jakarta EE 10项目配合Hibernate 6.0.2使用,但启动时出现服务初始化失败错误。

当前配置信息

WildFly中的PostgreSQL模块

<?xml version="1.0" ?>
<resources>
    <resource-root path="postgresql-42.2.5.jar"/>
</resources>
<dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
</dependencies>

数据源配置

<datasource jndi-name="java:jboss/datasources/nextu" pool-name="nextu">
    <connection-url>jdbc:postgresql://localhost:5432/nextu</connection-url>
    <driver>postgres</driver>
    <security>
        <user-name>nextu</user-name>
        <password>nextu</password>
    </security>
</datasource>

使用的驱动类

org.postgresql.Driver

Persistence.xml配置

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence
    xmlns="https://jakarta.ee/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_1.xsd"
             version="3.1">
    <persistence-unit name="primary">
        <jta-data-source>java:jboss/datasources/nextu</jta-data-source>
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <properties>
            <!-- AUTO-GENERATES DATABASE FROM ANNOTATIONS METADATA -->
            <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
            <property name="javax.persistence.schema-generation.create-source"  value="metadata"/>
            <property name="javax.persistence.schema-generation.drop-source" value="metadata"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect"/>
        </properties>
    </persistence-unit>
</persistence>

启动错误信息

00:50:49,304 错误 [org.jboss.msc.service.fail] (ServerService线程池 -- 80) MSC000001:启动服务jboss.persistenceunit."servlet-0.0.1-SNAPSHOT.war#primary"失败:org.jboss.msc.service.StartException in service jboss.persistenceunit."servlet-0.0.1-SNAPSHOT.war#primary": java.lang.ExceptionInInitializerError
at org.jboss.as.jpa@27.0.0.Alpha5//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:199)
at org.jboss.as.jpa@27.0.0.Alpha5//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:129)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at org.wildfly.security.elytron-base@2.0.0.Beta3//org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:664)
at org.jboss.as.jpa@27.0.0.Alpha5//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:214)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
at java.base/java.lang.Thread.run(Thread.java:833)
at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)
Caused by: java.lang.ExceptionInInitializerError
at org.hibernate@6.0.2.Final//org.hibernate.dialect.PostgreSQLDialect.contributeTypes(PostgreSQLDialect.java:1107)
at org.hibernate@6.0.2.Final//org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:374)
at org.hibernate@6.0.2.Final//org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:144)
at org.hibernate@6.0.2.Final//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1350)
at org.hibernate@6.0.2.Final//org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1421)
at org.hibernate.jipijapa-hibernate6@27.0.0.Alpha5//org.jboss.as.jpa.hibernate.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:45)
at org.jboss.as.jpa@27.0.0.Alpha5//org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:171)
... 10 more
Caused by: java.lang.RuntimeException: Could not initialize PostgreSQLPGObjectJdbcType
at org.hibernate@6.0.2.Final//org.hibernate.dialect.PostgreSQLIntervalSecondJdbcType.(PostgreSQLIntervalSecondJdbcType.java:78)
... 17 more
Caused by: java.lang.NoSuchMethodException: org.postgresql.util.PGInterval.getWholeSeconds()
at java.base/java.lang.Class.getDeclaredMethod(Class.java:2675)
at org.hibernate@6.0.2.Final//org.hibernate.dialect.PostgreSQLIntervalSecondJdbcType.(PostgreSQLIntervalSecondJdbcType.java:74)
... 17 more

00:50:49,307 错误 [org.jboss.as.controller.management-operation] (Controller启动线程) WFLYCTL0013:操作("deploy")失败 - 地址:([("deployment" => "servlet-0.0.1-SNAPSHOT.war")]) - 失败描述:{"WFLYCTL0080: Failed services" => {"jboss.persistenceunit."servlet-0.0.1-SNAPSHOT.war#primary"" => "java.lang.ExceptionInInitializerError Caused by: java.lang.ExceptionInInitializerError Caused by: java.lang.RuntimeException: Could not initialize PostgreSQLPGObjectJdbcType Caused by: java.lang.NoSuchMethodException: org.postgresql.util.PGInterval.getWholeSeconds()"}}
00:50:49,360 信息 [org.jboss.as.server] (ServerService线程池 -- 46) WFLYSRV0010:已部署"servlet-0.0.1-SNAPSHOT.war" (运行时名称:"servlet-0.0.1-SNAPSHOT.war")
00:50:49,361 信息 [org.jboss.as.controller] (Controller启动线程) WFLYCTL0183:服务状态报告
WFLYCTL0186:启动失败的服务:
service jboss.persistenceunit."servlet-0.0.1-SNAPSHOT.war#primary": java.lang.ExceptionInInitializerError
WFLYCTL0448:另有11个服务因依赖缺失或失败而停止
00:50:49,408 信息 [org.jboss.as.server] (Controller启动线程) WFLYSRV0212:恢复服务器
00:50:49,410 错误 [org.jboss.as] (Controller启动线程) WFLYSRV0026:WildFly Preview 27.0.0.Alpha5 (WildFly Core 19.0.0.Beta15) 已启动(存在错误),耗时9738ms - 已启动658个服务中的412个(13个服务失败或依赖缺失,362个服务为懒加载、被动或按需启动) - 使用的服务器配置文件:standalone.xml

解决方案

核心问题

错误根源是PostgreSQL JDBC驱动版本过低:当前使用的postgresql-42.2.5.jar中,org.postgresql.util.PGInterval类未包含getWholeSeconds()方法,而Hibernate 6.0.2需要该方法处理时间间隔类型。

修复步骤

  1. 升级PostgreSQL JDBC驱动版本

    • 下载适配Hibernate 6.0.2的PostgreSQL驱动,推荐使用42.3.0或更高版本(该版本起新增getWholeSeconds()方法)。
    • 替换WildFly模块中的旧驱动:将新的postgresql-xxx.jar放入WildFly对应模块目录(如modules/system/layers/base/org/postgresql/main),并更新module.xml中的resource-root path为新Jar文件名。
  2. 更新Hibernate方言(可选但推荐)
    Hibernate 6.0.2针对PostgreSQL提供了更新的方言,将persistence.xml中的方言配置替换为:

    <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
    

    也可根据PostgreSQL版本选择更具体的方言,如PostgreSQL10Dialect等。

  3. 清理并重新部署

    • 清理WildFly缓存目录(standalone/tmp和standalone/data)。
    • 重新部署应用,启动WildFly验证问题是否解决。

内容的提问来源于stack exchange,提问作者Andre Kouame

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 15:01:53