【问题标题】:Hibernate not creating table despite correct configurations and no error messages in logs尽管配置正确且日志中没有错误消息,但 Hibernate 未创建表
【发布时间】:2021-11-07 15:44:08
【问题描述】:

我正在我的 Spring Boot 应用程序中创建一个新的数据库表,但问题是尽管配置正确且没有日志错误消息,但该表并未在数据库中创建。这是我的模型类:

@Entity
@Table(name="user_avatar")
public class UserAvatar {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="user_avatar_id")
    private String userAvatarId;
    
    @OneToOne
    @JoinColumn(name="user_id")
    private User user;
    @Column(name="random_string")
    private String randomString;
    @Column(name="style_options")
    private String styleOptions;
    @Column(name="avatar_type")
    private String avatarType;
    ...

这是我的application.properties 文件:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://${DB_HOST}/${DB_NAME}?createDatabaseIfNotExist=true&autoReconnect=true&allowPublicKeyRetrieval=true&useSSL=false&useUnicode=yes&characterEncoding=UTF-8&characterSetResults=UTF-8
spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD}
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true

spring.jpa.hibernate.ddl-auto=create
server.tomcat.uri-encoding=UTF-8
spring.data.jpa.repositories.bootstrap-mode = default

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.jpa.properties.hibernate.connection.characterEncoding=utf-8
spring.jpa.properties.hibernate.connection.CharSet=utf-8
spring.jpa.properties.hibernate.connection.useUnicode=true

还有我的控制台日志,缩短以显示 Hibernate create 查询:

Hibernate: create table student_storybook (student_storybook_id integer not null auto_increment, is_quiz_completed tinyint(1) default 0, is_story_completed tinyint(1) default 0, by_student_id integer, for_storybook_id integer, in_progress_quiz_session integer, in_progress_story_session integer, primary key (student_storybook_id)) engine=InnoDB
2021-09-11 09:43:20.561 DEBUG 5684 --- [           main] org.hibernate.SQL                        : create table teacher (teacher_id integer not null auto_increment, name varchar(255), user_id integer, primary key (teacher_id)) engine=InnoDB
Hibernate: create table teacher (teacher_id integer not null auto_increment, name varchar(255), user_id integer, primary key (teacher_id)) engine=InnoDB
2021-09-11 09:43:20.575 DEBUG 5684 --- [           main] org.hibernate.SQL                        : create table user (id integer not null auto_increment, avatar_data TEXT, avatar_type integer, email varchar(255), gender varchar(255), password varchar(255), reset_password_token varchar(255), role varchar(255), username varchar(255), user_avatar_id integer, primary key (id)) engine=InnoDB
Hibernate: create table user (id integer not null auto_increment, avatar_data TEXT, avatar_type integer, email varchar(255), gender varchar(255), password varchar(255), reset_password_token varchar(255), role varchar(255), username varchar(255), user_avatar_id integer, primary key (id)) engine=InnoDB
2021-09-11 09:43:20.595 DEBUG 5684 --- [           main] org.hibernate.SQL                        : create table user_avatar (user_avatar_id varchar(255) not null auto_increment, avatar_type varchar(255), random_string varchar(255), style_options varchar(255), user_id integer, primary key (user_avatar_id)) engine=InnoDB
Hibernate: create table user_avatar (user_avatar_id varchar(255) not null auto_increment, avatar_type varchar(255), random_string varchar(255), style_options varchar(255), user_id integer, primary key (user_avatar_id)) engine=InnoDB

正如您在此处看到的,尽管正在执行 Hibernate create 查询,但未在数据库中创建所需的 user_avatar 表:

为什么会这样以及如何解决这个问题?

【问题讨论】:

    标签: java mysql spring-boot hibernate create-table


    【解决方案1】:

    原来这是因为一个非常微不足道的错误:我将 UserAvatar 类的主键作为 String,而它应该是 int 类型:

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="user_avatar_id")
    private int userAvatarId;
    

    修改后,表创建成功。

    另外说明:尽管在 application.properties 文件中有以下设置,但 Hibernate 控制台日志未显示详细说明未创建表的原因的错误消息:

     DEBUG = true
     logging.level.org.springframework.web= DEBUG
     logging.level.org.hibernate= ERROR
    

    但这是另一个帖子的问题:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 2021-11-23
      • 2017-01-17
      • 2016-06-10
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多