尽管配置正确且日志中没有错误消息,Hibernate 仍未创建 table

Hibernate not creating table despite correct configurations and no error messages in logs

我正在我的 Spring 引导应用程序中创建一个新数据库 table,但问题是 table 没有在数据库中创建,尽管配置正确并且没有记录错误信息。这是我的模型 class:

@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 table:

为什么会这样,我该如何解决这个问题?

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

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

修改后,table创建成功。

另一个注意事项:Hibernate 控制台日志未显示错误消息,详细说明了为什么 table 没有被创建,尽管 application.properties 文件中有以下设置:

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

但这是另一个 post :)

的问题