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

WildFly+Hibernate报错:Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

解决方案

1. 修复persistence.xml结构缺失问题

你的persistence.xml缺少JPA规范要求的根标签和命名空间,完整的配置文件应该是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"
             version="2.2">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <class>entity.LeadsEntity</class>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/zadatakdb?useSSL=false&amp;serverTimezone=UTC"/>
            <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.password" value="root"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>
  • 补充了完整的根标签与命名空间,这是JPA加载配置的必要前提
  • 替换废弃的com.mysql.jdbc.Driver为新版驱动com.mysql.cj.jdbc.Driver,适配MySQL 8+版本
  • 更新方言为MySQL8Dialect,避免兼容性问题
  • 连接URL添加useSSL=false和serverTimezone=UTC,解决时区与SSL连接报错
  • 新增hibernate.hbm2ddl.auto=update,自动同步实体类与数据库表结构

2. 修正实体类主键生成冲突

你的LeadsEntity中leadId使用了IDENTITY自增策略,但代码中手动设置了主键值,这会导致自增逻辑冲突。修改方式:

  • 移除代码中的leadsEntity.setLeadId(5);,让数据库自动生成主键
  • 若需手动指定主键,将生成策略改为GenerationType.AUTO或移除@GeneratedValue注解

修正后的getLeads()方法:

@GET
@Produces("text/plain")
@Path("/test")
public void getLeads() {
    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("default");
    EntityManager entityManager = entityManagerFactory.createEntityManager();
    EntityTransaction transaction = entityManager.getTransaction();

    try{
        transaction.begin();
        LeadsEntity leadsEntity = new LeadsEntity();
        // 移除手动设置主键的代码,依赖数据库自增
        leadsEntity.setFirstName("Test");
        leadsEntity.setLastName("Tester");
        leadsEntity.setAddress("Test street 2");
        leadsEntity.setAge(33);

        entityManager.persist(leadsEntity);
        transaction.commit();
    }finally {
        if(transaction.isActive()){
            transaction.rollback();
        }
        entityManager.close();
        entityManagerFactory.close();
    }
}

3. 确认MySQL驱动依赖配置

确保项目中引入了适配版本的MySQL驱动,Maven依赖示例:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
    <scope>provided</scope>
</dependency>

若为WildFly部署,需将驱动包放置到WildFly_HOME/modules/system/layers/base/com/mysql/main目录,并配置module.xml,确保服务器能正确加载驱动。

4. 验证数据库连接可用性

  • 确认MySQL服务正常运行,端口3306可访问
  • 用MySQL客户端测试root/root账号能否连接zadatakdb数据库
  • 确保zadatakdb中leads表存在,字段结构与实体类一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:39:33