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

SpringBoot+Maven环境下Hibernate无法在MySQL中自动建表

问题:Hibernate ORM无法自动创建数据表(已成功连接MySQL)

我不清楚为什么Hibernate ORM无法自动创建数据表,目前已经成功建立MySQL连接。

项目依赖配置(pom.xml)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.authenticatie</groupId>
    <artifactId>authenticatie</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>authenticatie</name>
    <description>后端认证服务</description>
    <properties>
        <java.version>19</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>18</source>
                    <target>18</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

实体类代码

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.*;

@Entity
public class Postzegel {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private int prijs;
    //    private Image;
    public Postzegel() {
    }

    public Postzegel(int Id, int Prijs) {
        this.id = Id;
        this.prijs = Prijs;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getPrijs() {
        return prijs;
    }

    public void setPrijs(int prijs) {
        this.prijs = prijs;
    }
}

application.properties配置

#configuration
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3307/pakketjesauthenticatiedb
spring.datasource.username=pakketjesauthenticatiedb
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

数据库连接状态

已确认数据库连接成功:
数据库连接成功截图


排查与解决方案
  1. 实体类扫描范围问题
    Spring Boot默认仅扫描主启动类所在包及其子包内的实体类。若Postzegel实体类不在该范围内,需在主启动类添加@EntityScan注解指定实体类包路径:

    @SpringBootApplication
    @EntityScan("com.authenticatie.entity") // 替换为实体类实际包路径
    public class AuthenticatieApplication {
        public static void main(String[] args) {
            SpringApplication.run(AuthenticatieApplication.class, args);
        }
    }
    
  2. 数据库权限不足
    确认数据库用户pakketjesauthenticatiedb拥有建表、改表权限,可执行以下SQL赋予权限:

    GRANT CREATE, ALTER, INSERT, SELECT, UPDATE ON pakketjesauthenticatiedb.* TO 'pakketjesauthenticatiedb'@'localhost';
    FLUSH PRIVILEGES;
    
  3. 驱动版本兼容性
    Spring Boot 2.7.5推荐使用新版MySQL驱动,替换依赖:

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    
  4. DDL配置验证
    添加日志配置查看Hibernate执行细节,确认建表语句是否生成:

    spring.jpa.show-sql=true
    spring.jpa.properties.hibernate.format_sql=true
    logging.level.org.hibernate.SQL=DEBUG
    
  5. Java版本统一
    pom.xml中java.version为19,但编译插件指定版本为18,需统一版本(如都改为18),并确保本地环境Java版本与配置一致。

  6. 数据库引擎指定
    在连接URL中指定InnoDB引擎(MyISAM不支持部分Hibernate特性):

    spring.datasource.url=jdbc:mysql://localhost:3307/pakketjesauthenticatiedb?useSSL=false&serverTimezone=UTC&storage_engine=InnoDB
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:51