首页 > 解决方案 > 春季启动中的 org.hibernate.tool.schema.spi.CommandAcceptanceException

问题描述

我是弹簧靴的新手。我有这个 UserEntity 类。当我运行应用程序时,会引发以下异常。SQL 查询对我来说似乎没问题。这有什么问题?

这是我的属性文件。网址有什么问题吗?

spring.datasource.username=dummy
spring.datasource.password=dummy
spring.datasource.url=jdbc:mysql://104.251.215.120:3306/moodsinger_v3?useUnicode=yes&characterEncoding=UTF-8
spring.jpa.hibernate.ddl-auto=update

这是我的 UserEntity 类。日期字段有什么问题吗?我希望creationTime 和deletionTime 是 TIMESTAMP 。这是正确的方法吗?


import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

// import org.springframework.data.annotation.Id;
// create table users (id bigint not null, birth_date varchar(255) not null, brand_name varchar(255), creation_time TIMESTAMP default CURRENT_TIMESTAMP not null, deletion_time TIMESTAMP default NULL, email varchar(100), gender char(1) not null, image_url varchar(255), interested_genres varchar(255), is_active boolean default false, is_admin boolean default false, is_label_company boolean default false, is_premium boolean default false, is_singer_composer boolean default false, num_affiliated_artists integer, num_albums_published integer, num_original_songs integer, num_years_active integer, phone_number varchar(20) not null, social_media_channels varchar(255), user_id varchar(250) not null, user_name varchar(100) not null, primary key (id)) engine=InnoDB

@Entity(name = "Users")
public class UserEntity implements Serializable {
  public static final long serialVersionUID = 65836868374686L;

  @Id
  @GeneratedValue
  private long id;

  @Column(nullable = false, length = 250)
  private String userId;

  @Column(nullable = false, length = 100)
  private String userName;

  @Column(nullable = false, length = 20)
  private String phoneNumber;

  @Column(nullable = true, length = 100)
  private String email;

  @Column(nullable = false)
  private char gender;

  @Column(nullable = false)
  private String birthDate;

  @Column(nullable = true)
  private String imageUrl;

  @Column(nullable = true)
  private String brandName;

  @Column(nullable = true)
  private int numYearsActive;

  @Column(nullable = true, columnDefinition = "JSON default NULL")
  private String interestedGenres;

  @Column(nullable = true)
  private int numAffiliatedArtists;

  @Column(nullable = true)
  private int numAlbumsPublished;

  @Column(nullable = true)
  private int numOriginalSongs;

  @Column(nullable = true, columnDefinition = "JSON default NULL")
  private String socialMediaChannels;

  @Column(nullable = true, columnDefinition = "TIMESTAMP default NULL")
  private Date deletionTime;

  @Column(nullable = true, columnDefinition = "boolean default false")
  private boolean isAdmin;

  @Column(nullable = true, columnDefinition = "boolean default false")
  private boolean isPremium;

  @Column(nullable = false, columnDefinition = "TIMESTAMP default CURRENT_TIMESTAMP")
  private Date creationTime;

  @Column(nullable = true, columnDefinition = "boolean default false")
  private boolean isLabelCompany;

  @Column(nullable = true, columnDefinition = "boolean default false")
  private boolean isActive;

  @Column(nullable = true, columnDefinition = "boolean default false")
  private boolean isSingerComposer;

  public long getId() {
    return this.id;
  }

  public void setId(long id) {
    this.id = id;
  }

  public String getUserId() {
    return this.userId;
  }

  public void setUserId(String userId) {
    this.userId = userId;
  }

  public String getUserName() {
    return this.userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public String getPhoneNumber() {
    return this.phoneNumber;
  }

  public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
  }

  public String getEmail() {
    return this.email;
  }

  public void setEmail(String email) {
    this.email = email;
  }

  public char getGender() {
    return this.gender;
  }

  public void setGender(char gender) {
    this.gender = gender;
  }

  public String getImageUrl() {
    return this.imageUrl;
  }

  public void setImageUrl(String imageUrl) {
    this.imageUrl = imageUrl;
  }

  public String getBirthDate() {
    return this.birthDate;
  }

  public void setBirthDate(String birthDate) {
    this.birthDate = birthDate;
  }

  public String getBrandName() {
    return this.brandName;
  }

  public void setBrandName(String brandName) {
    this.brandName = brandName;
  }

  public String getInterestedGenres() {
    return this.interestedGenres;
  }

  public void setInterestedGenres(String interestedGenres) {
    this.interestedGenres = interestedGenres;
  }

  public int getNumYearsActive() {
    return this.numYearsActive;
  }

  public void setNumYearsActive(int numYearsActive) {
    this.numYearsActive = numYearsActive;
  }

  public int getNumAffiliatedArtists() {
    return this.numAffiliatedArtists;
  }

  public void setNumAffiliatedArtists(int numAffiliatedArtists) {
    this.numAffiliatedArtists = numAffiliatedArtists;
  }

  public int getNumAlbumsPublished() {
    return this.numAlbumsPublished;
  }

  public void setNumAlbumsPublished(int numAlbumsPublished) {
    this.numAlbumsPublished = numAlbumsPublished;
  }

  public int getNumOriginalSongs() {
    return this.numOriginalSongs;
  }

  public void setNumOriginalSongs(int numOriginalSongs) {
    this.numOriginalSongs = numOriginalSongs;
  }

  public String getSocialMediaChannels() {
    return this.socialMediaChannels;
  }

  public void setSocialMediaChannels(String socialMediaChannels) {
    this.socialMediaChannels = socialMediaChannels;
  }

  public boolean isIsAdmin() {
    return this.isAdmin;
  }

  public void setIsAdmin(boolean isAdmin) {
    this.isAdmin = isAdmin;
  }

  public boolean isIsPremium() {
    return this.isPremium;
  }

  public void setIsPremium(boolean isPremium) {
    this.isPremium = isPremium;
  }

  public boolean isIsLabelCompany() {
    return this.isLabelCompany;
  }

  public void setIsLabelCompany(boolean isLabelCompany) {
    this.isLabelCompany = isLabelCompany;
  }

  public boolean isIsSingerComposer() {
    return this.isSingerComposer;
  }

  public void setIsSingerComposer(boolean isSingerComposer) {
    this.isSingerComposer = isSingerComposer;
  }

  public boolean isIsActive() {
    return this.isActive;
  }

  public void setIsActive(boolean isActive) {
    this.isActive = isActive;
  }

  public Date getCreationTime() {
    return this.creationTime;
  }

  public void setCreationTime(Date creationTime) {
    this.creationTime = creationTime;
  }

  public Date getDeletionTime() {
    return this.deletionTime;
  }

  public void setDeletionTime(Date deletionTime) {
    this.deletionTime = deletionTime;
  }

}

这是抛出的异常。sql查询对我来说似乎没问题。那怎么了..?

num_original_songs integer, num_years_active integer, phone_number varchar(20) not null, social_media_channels JSON default NULL, user_id varchar(250) not null, user_name varchar(100) not null, primary key (id)) engine=InnoDB" via JDBC Statement     
        at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:559) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:504) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:277) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:71) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:207) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:114) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:184) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:73) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:318) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:468) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1259) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.3.6.jar:5.3.6]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.3.6.jar:5.3.6]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-5.3.6.jar:5.3.6]
        at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-5.3.6.jar:5.3.6]
        at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.6.jar:5.3.6]
        at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1154) ~[spring-context-5.3.6.jar:5.3.6]
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:908) ~[spring-context-5.3.6.jar:5.3.6]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.6.jar:5.3.6]
        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:144) ~[spring-boot-2.4.5.jar:2.4.5]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:782) ~[spring-boot-2.4.5.jar:2.4.5]     
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:774) ~[spring-boot-2.4.5.jar:2.4.5]     
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:439) ~[spring-boot-2.4.5.jar:2.4.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:339) ~[spring-boot-2.4.5.jar:2.4.5]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1340) ~[spring-boot-2.4.5.jar:2.4.5]        
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:1329) ~[spring-boot-2.4.5.jar:2.4.5]        
        at com.moodsinger.moodsinger.MoodsingerApplication.main(MoodsingerApplication.java:10) ~[classes/:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] 
        at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
        at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.4.5.jar:2.4.5]
Caused by: java.sql.SQLSyntaxErrorException: Invalid default value for 'deletion_time'
        at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.23.jar:8.0.23]
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.23.jar:8.0.23]
        at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:762) ~[mysql-connector-java-8.0.23.jar:8.0.23] 
        at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:646) ~[mysql-connector-java-8.0.23.jar:8.0.23]
        at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-3.4.5.jar:na]
        at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-3.4.5.jar:na]
        at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.4.30.Final.jar:5.4.30.Final]
        ... 40 common frames omitted```

标签: mysqlspring-bootspring-data-jpa

解决方案


回答这个问题有点晚了。如果您仍然遇到此问题,请尝试使用此查询创建表。

create table users (id bigint not null, birth_date varchar(255) not null, brand_name varchar(255), creation_time TIMESTAMP default CURRENT_TIMESTAMP not null, deletion_time TIMESTAMP NULL default NULL, email varchar(100), gender char(1) not null, image_url varchar(255), interested_genres varchar(255), is_active boolean default false, is_admin boolean default false, is_label_company boolean default false, is_premium boolean default false, is_singer_composer boolean default false, num_affiliated_artists integer, num_albums_published integer, num_original_songs integer, num_years_active integer, phone_number varchar(20) not null, social_media_channels varchar(255), user_id varchar(250) not null, user_name varchar(100) not null, primary key (id)) engine=InnoDB

我变了deletion_time TIMESTAMP NULL default NULL

插入 NULL 值时,TimeStamp 类型的列具有不同的工作流程。查看https://dev.mysql.com/doc/refman/8.0/en/timestamp-initialization.html中的“TIMESTAMP 初始化和 NULL 属性”

并在您的 UserEntity 文件中使用 TimeStamp 作为 Timestamp 列而不是 Date


推荐阅读