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

WildFly中Hibernate连接MySQL报“No database selected”错误的排查咨询

Hibernate在WildFly部署时执行DDL报错:No database selected

错误日志

GenerationTarget encountered exception accepting command : Error executing DDL "
    alter table exam_table 
       drop 
       foreign key FKgp6h92beial8lknuhckmukak8" via JDBC [No database selected]

相关配置

persistence.xml

<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_0.xsd"
             version="3.0">

    <persistence-unit name="control" transaction-type="JTA">
        <jta-data-source>java:jboss/datasources/MySQLDS</jta-data-source>

        <!-- Entity classes -->
        <class>com.to.Speciality</class>
        <class>com.to.Exam</class>
        <class>com.to.Student</class>
        <class>com.to.Session</class>

            <!-- Hibernate Provider Properties -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.use_sql_comments" value="false" />

            <!-- Connection Pooling (Optional) -->
            <property name="hibernate.connection.pool_size" value="10" />
        </properties>
    </persistence-unit>
</persistence>

standalone.xml(数据源部分)

<subsystem xmlns="urn:jboss:domain:datasources:7.2">
    <datasources>
        <datasource jndi-name="java:jboss/datasources/MySQLDS" pool-name="MySQLDS" enabled="true" use-java-context="true">
            <connection-url>jdbc:mysql://localhost:3306/examdb?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</connection-url>
            <driver>com.mysql</driver>
            <pool>
                <min-pool-size>5</min-pool-size>
                <max-pool-size>20</max-pool-size>
            </pool>
            <security user-name="root" password="pwd"/>
            <validation>
                <check-valid-connection-sql>USE examdb; SELECT 1</check-valid-connection-sql>
                <background-validation>true</background-validation>
                <background-validation-millis>10000</background-validation-millis>
            </validation>
        </datasource>
        <drivers>
            <driver name="com.mysql" module="com.mysql">
                <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
                <datasource-class>com.mysql.cj.jdbc.MysqlDataSource</datasource-class>
            </driver>
        </drivers>
    </datasources>
</subsystem>

已尝试操作

  • 确认MySQL中examdb数据库存在
  • 验证standalone.xml的连接URL已指定examdb
  • 确认persistence.xml正确引用JTA数据源java:jboss/datasources/MySQLDS
  • 确认MySQL JDBC驱动已在WildFly中正确配置为模块

问题

Hibernate执行DDL时无法找到数据库,报错No database selected,请问可能原因是什么?如何修复?


解答

可能原因

  1. 连接验证SQL干扰连接状态:standalone.xml中配置的check-valid-connection-sql使用USE examdb; SELECT 1,多条语句的执行可能导致连接池管理的连接丢失默认数据库关联,尤其是MySQL JDBC驱动对多语句执行的处理方式可能引发该问题。
  2. Hibernate方言版本不兼容:当前使用的org.hibernate.dialect.MySQLDialect是旧版方言,对于MySQL 8.0+版本存在适配问题,导致DDL执行时未正确绑定数据库。
  3. 冗余的连接池配置冲突:persistence.xml中配置的hibernate.connection.pool_size与WildFly内置的连接池管理逻辑冲突,干扰了连接的初始化状态。

修复步骤

  1. 简化连接验证SQL
    连接URL已指定默认数据库,无需额外执行USE语句,修改standalone.xml中的验证SQL:

    <check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
    
  2. 更新Hibernate方言
    若使用MySQL 8.0及以上版本,替换为适配的方言:

    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect" />
    
  3. 移除冗余的连接池配置
    应用服务器的连接池已负责连接管理,删除persistence.xml中的以下配置:

    <property name="hibernate.connection.pool_size" value="10" />
    
  4. 重启服务器并重新部署
    保存配置后重启WildFly,确保新配置生效,再重新部署应用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:17:03