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

如何排查Hibernate 5.6.4搭配MySQL 8.0.29时的SQL语法错误

解决Hibernate保存Student时表不存在的异常

你的问题核心是Hibernate没有自动创建student表,根源在hibernate.cfg.xml里的几处配置错误,加上方言不匹配导致DDL生成失效。以下是具体修复步骤:

1. 修正MySQL方言配置

你使用的是MySQL 8.0.29,但配置里用了MySQL5Dialect,这会导致Hibernate生成的DDL语法不兼容MySQL8,无法正确创建表。把方言改成:

<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>

2. 修复show_sql的配置值

show_sql的取值只能是true或false,你写成了update,属于无效配置,会干扰Hibernate初始化逻辑,导致hbm2ddl.auto=update不生效。修正为:

<property name="show_sql">true</property>

3. 确认数据库已创建

hbm2ddl.auto=update只会自动创建表,不会创建数据库。先手动登录MySQL执行以下命令确保hibernatedb存在:

CREATE DATABASE IF NOT EXISTS hibernatedb;

4. 可选:强制创建表(临时方案)

如果以上步骤改完仍不生效,可以临时把hibernate.hbm2ddl.auto改成create,运行一次程序后再改回update,强制Hibernate重建表:

<property name="hibernate.hbm2ddl.auto">create</property>

修正后的完整hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver.class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatedb</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">mysql@123</property>
        <property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="show_sql">true</property>
    </session-factory>
</hibernate-configuration>

改完这些配置后重新运行程序,Hibernate会自动创建student表,保存操作即可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:21:58