mysql - 春季启动中的 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```
解决方案
回答这个问题有点晚了。如果您仍然遇到此问题,请尝试使用此查询创建表。
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
推荐阅读
- google-chrome-devtools - 无法执行并发 Chrome 开发工具性能配置文件
- javascript - 如何调用 REST api 并获取响应并在 HTML 页面中显示
- npm - 从发布中提取 package-lock.json 以重现构建
- python - 对已按降序分组的条形图值进行排序
- python - 绑定字典时变量名/编号非法
- python - sample_weight 在 SGDClassifier 中是如何工作的?
- java - 如何从此代码中获得整个多边形的颜色?
- mysql - 如何在 MySQL 中搜索没有定义字符的字符串?
- azure - 使用 Autofac 在项目中设置 AAD 身份验证
- javascript - 显示 Plotly 图表的全轴范围?