Hibernate未创建MySQL数据库表,应用运行无报错
问题分析与解决
服务启动成功但数据库未生成对应表,结合你提供的配置文件,可从以下几个方面排查修正:
1. 配置文件的语法/拼写错误
你的application.properties存在两处明显问题:
spring.jpa.properties.hibernate.formate_sql=true;:拼写错误(formate应为format),且末尾多余分号会导致配置解析失败,修正为:spring.jpa.properties.hibernate.format_sql=truespring.jpa.hibernate.naming_strategy = org.hibernate.cfg.ImprovedNamingStrategy:该属性在Hibernate 5及以上版本已废弃,替换为:spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl # 若需要原ImprovedNamingStrategy的命名逻辑,可改用: # spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
2. 确认实体类存在
JPA仅会为标注@Entity注解的类生成数据库表,若项目中无任何实体类,自然不会生成表。确保你有类似如下的实体类:
import jakarta.persistence.Entity; import jakarta.persistence.Id; @Entity public class User { @Id private Long id; private String username; // 补充getter、setter方法 }
3. 优化冗余配置
spring.jpa.generate-ddl=true 和 spring.jpa.hibernate.ddl-auto=create 功能重叠,保留spring.jpa.hibernate.ddl-auto=create即可,它已包含自动生成DDL的逻辑。
修正后的完整配置
# application.properties spring.datasource.url=jdbc:mysql://localhost:3306/userdb spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.jpa.show-sql=true spring.jpa.database=MYSQL spring.jpa.properties.hibernate.format_sql=true spring.jpa.hibernate.ddl-auto=create spring.jpa.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
完成以上修正后重启服务,数据库userdb中应该会自动生成对应实体的表。
内容的提问来源于stack exchange,提问作者Utkarsh Rastogi
相关产品推荐
相关产品推荐

