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
数据库连接状态
已确认数据库连接成功:
排查与解决方案
实体类扫描范围问题
Spring Boot默认仅扫描主启动类所在包及其子包内的实体类。若Postzegel实体类不在该范围内,需在主启动类添加@EntityScan注解指定实体类包路径:@SpringBootApplication @EntityScan("com.authenticatie.entity") // 替换为实体类实际包路径 public class AuthenticatieApplication { public static void main(String[] args) { SpringApplication.run(AuthenticatieApplication.class, args); } }数据库权限不足
确认数据库用户pakketjesauthenticatiedb拥有建表、改表权限,可执行以下SQL赋予权限:GRANT CREATE, ALTER, INSERT, SELECT, UPDATE ON pakketjesauthenticatiedb.* TO 'pakketjesauthenticatiedb'@'localhost'; FLUSH PRIVILEGES;驱动版本兼容性
Spring Boot 2.7.5推荐使用新版MySQL驱动,替换依赖:<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>DDL配置验证
添加日志配置查看Hibernate执行细节,确认建表语句是否生成:spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true logging.level.org.hibernate.SQL=DEBUGJava版本统一
pom.xml中java.version为19,但编译插件指定版本为18,需统一版本(如都改为18),并确保本地环境Java版本与配置一致。数据库引擎指定
在连接URL中指定InnoDB引擎(MyISAM不支持部分Hibernate特性):spring.datasource.url=jdbc:mysql://localhost:3307/pakketjesauthenticatiedb?useSSL=false&serverTimezone=UTC&storage_engine=InnoDB
内容的提问来源于stack exchange,提问作者Cezar P
相关产品推荐
相关产品推荐

