Spring Boot连接MariaDB成功但实体表未生成的问题求助
Spring Boot + MariaDB 实体表未生成问题排查与解决
问题诊断
从日志和代码来看,数据库连接正常但未生成user表,核心原因如下:
- JPA注解版本不兼容:Spring Boot 3.x基于Jakarta EE,实体类使用的
javax.persistence.*注解已被废弃,JPA无法识别该实体。 - 缺少Repository触发扫描:Spring Boot 3.x中,若未定义JPA Repository接口,Hibernate可能不会触发实体的DDL生成逻辑(日志显示
Found 0 JPA repository interfaces)。 - 配置冗余冲突:
spring.jpa.generate-ddl=true与spring.jpa.hibernate.ddl-auto=update同时配置,可能干扰DDL生成逻辑。 - 数据库权限存疑:配置中空用户名和密码,需确认连接用户是否拥有
pos2cloud数据库的表创建/修改权限。
解决步骤
1. 替换实体类注解为Jakarta EE版本
将javax.persistence替换为jakarta.persistence,适配Spring Boot 3.x:
package com.pos2cloud.restservice; import jakarta.persistence.*; import java.util.Objects; @Entity @Table(name="user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name="name") private String name; @Column(name="email") private String email; // 构造方法、getter/setter、equals、hashCode、toString保持不变 }
2. 创建JPA Repository接口
在com.pos2cloud.restservice包下添加UserRepository,触发Spring Data JPA对实体的扫描:
package com.pos2cloud.restservice; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { }
3. 简化JPA配置,修复账号信息
修改application.properties,移除冗余配置并填写有效数据库账号:
server.address=0.0.0.0 server.port=5000 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mariadb://localhost:3306/pos2cloud # 替换为实际数据库用户名和密码 spring.datasource.username=root spring.datasource.password=your_database_password # 可选:开启SQL日志,验证DDL执行情况 spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true
4. 验证数据库用户权限
确保连接用户拥有pos2cloud数据库的操作权限,执行MariaDB命令:
GRANT ALL PRIVILEGES ON pos2cloud.* TO 'your_user'@'localhost'; FLUSH PRIVILEGES;
验证步骤
- 重启Spring Boot应用
- 查看终端日志,若开启SQL日志,会看到
create table user相关DDL语句 - 登录MariaDB,执行
use pos2cloud; show tables;确认user表生成
原问题相关代码与日志
1. 原application.properties
server.address=0.0.0.0 server.port=5000 spring.datasource.driver-class-name=org.mariadb.jdbc.Driver spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect spring.jpa.generate-ddl=true spring.jpa.hibernate.ddl-auto=update spring.datasource.url=jdbc:mariadb://localhost:3306/pos2cloud spring.datasource.username="" spring.datasource.password=""
2. 原User.java
package com.pos2cloud.restservice; import javax.persistence.*; import java.util.Objects; @Entity @Table(name="user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name="name") private String name; @Column(name="email") private String email; public User(){} public User(String name, String email){ this.name = name; this.email = email; } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getEmail() { return this.email; } public void setEmail(String email) { this.email = email; } @Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof User)) { return false; } User user = (User) o; return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(email, user.email); } @Override public int hashCode() { return Objects.hash(id, name, email); } @Override public String toString() { return "{" + " id='" + getId() + "'" + ", name='" + getName() + "'" + ", email='" + getEmail() + "'" + "}"; } }
3. 原RestServiceApplication.java
package com.pos2cloud.restservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RestServiceApplication { public static void main(String[] args) { SpringApplication.run(RestServiceApplication.class, args); }
4. 原终端日志
[INFO] Scanning for projects... [INFO] [INFO] ---------------------< com.pos2cloud:rest-service >--------------------- [INFO] Building rest-service 0.0.1-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] >>> spring-boot-maven-plugin:3.0.3:run (default-cli) > test-compile @ rest-service >>> [INFO] [INFO] --- maven-resources-plugin:3.3.0:resources (default-resources) @ rest-service --- [INFO] Copying 1 resource [INFO] Copying 0 resource [INFO] [INFO] --- maven-compiler-plugin:3.10.1:compile (default-compile) @ rest-service --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 3 source files to /home/ubuntu/pos2cloud/rest-service/target/classes [INFO] [INFO] --- maven-resources-plugin:3.3.0:testResources (default-testResources) @ rest-service --- [INFO] skip non existing resourceDirectory /home/ubuntu/pos2cloud/rest-service/src/test/resources [INFO] [INFO] --- maven-compiler-plugin:3.10.1:testCompile (default-testCompile) @ rest-service --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 1 source file to /home/ubuntu/pos2cloud/rest-service/target/test-classes [INFO] [INFO] <<< spring-boot-maven-plugin:3.0.3:run (default-cli) < test-compile @ rest-service <<< [INFO] [INFO] [INFO] --- spring-boot-maven-plugin:3.0.3:run (default-cli) @ rest-service --- [INFO] Attaching agents: [] . ____ _ __ _ _ /\ / ___'_ __ _ _(_)_ __ __ _ \ \ \\ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \\ \/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.0.3) 2023-03-02T19:54:02.492Z INFO 363131 --- [ main] c.p.restservice.RestServiceApplication : Starting RestServiceApplication using Java 17.0.5 with PID 363131 (/home/ubuntu/pos2cloud/rest-service/target/classes started by ubuntu in /home/ubuntu/pos2cloud/rest-service) 2023-03-02T19:54:02.497Z INFO 363131 --- [ main] c.p.restservice.RestServiceApplication : No active profile set, falling back to 1 default profile: "default" 2023-03-02T19:54:03.008Z INFO 363131 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode. 2023-03-02T19:54:03.027Z INFO 363131 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 11 ms. Found 0 JPA repository interfaces. 2023-03-02T19:54:03.505Z INFO 363131 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 5000 (http) 2023-03-02T19:54:03.515Z INFO 363131 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2023-03-02T19:54:03.515Z INFO 363131 --- [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.5] 2023-03-02T19:54:03.600Z INFO 363131 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2023-03-02T19:54:03.602Z INFO 363131 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1059 ms 2023-03-02T19:54:03.737Z INFO 363131 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default] 2023-03-02T19:54:03.777Z INFO 363131 --- [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.1.7.Final 2023-03-02T19:54:03.928Z INFO 363131 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.2.Final} 2023-03-02T19:54:04.016Z INFO 363131 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting... 2023-03-02T19:54:04.082Z INFO 363131 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection org.mariadb.jdbc.Connection@58dad04a 2023-03-02T19:54:04.096Z INFO 363131 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed. 2023-03-02T19:54:04.114Z INFO 363131 --- [ main] SQL dialect : HHH000400: Using dialect: org.hibernate.dialect.MariaDB103Dialect 2023-03-02T19:54:04.115Z WARN 363131 --- [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform] 2023-03-02T19:54:04.367Z INFO 363131 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2023-03-02T19:54:04.400Z WARN 363131 --- [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2023-03-02T19:54:04.711Z INFO 363131 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 5000 (http) with context path '' 2023-03-02T19:54:04.720Z INFO 363131 --- [ main] c.p.restservice.RestServiceApplication : Started RestServiceApplication in 2.565 seconds (process running for 2.852)
内容的提问来源于stack exchange,提问作者Geo7212
相关产品推荐
相关产品推荐

