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

Spring Boot连接MariaDB成功但实体表未生成的问题求助

Spring Boot + MariaDB 实体表未生成问题排查与解决

问题诊断

从日志和代码来看,数据库连接正常但未生成user表,核心原因如下:

  1. JPA注解版本不兼容:Spring Boot 3.x基于Jakarta EE,实体类使用的javax.persistence.*注解已被废弃,JPA无法识别该实体。
  2. 缺少Repository触发扫描:Spring Boot 3.x中,若未定义JPA Repository接口,Hibernate可能不会触发实体的DDL生成逻辑(日志显示Found 0 JPA repository interfaces)。
  3. 配置冗余冲突:spring.jpa.generate-ddl=true与spring.jpa.hibernate.ddl-auto=update同时配置,可能干扰DDL生成逻辑。
  4. 数据库权限存疑:配置中空用户名和密码,需确认连接用户是否拥有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;

验证步骤

  1. 重启Spring Boot应用
  2. 查看终端日志,若开启SQL日志,会看到create table user相关DDL语句
  3. 登录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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:07:38