Spring 引导无法在 mysql 5.7 中创建数据库 table
Spring Boot cannot create database table in mysql 5.7
我想用 mysql 服务器中的信息创建一个名为 dni 的 table。
@Entity
public class Dni implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false, updatable = false)
private Long id;
private String nombre;
private String apellidos;
private String direccion;
private String fotoPerfil;
private String codigoDni;
private String fechaNacimiento;
public Dni() {
}
public Dni(Long id, String nombre, String apellidos, String direccion, String fotoPerfil, String codigoDni, String fechaNacimiento) {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.direccion = direccion;
this.fotoPerfil = fotoPerfil;
this.codigoDni = codigoDni;
this.fechaNacimiento = fechaNacimiento;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getFotoPerfil() {
return fotoPerfil;
}
public void setFotoPerfil(String fotoPerfil) {
this.fotoPerfil = fotoPerfil;
}
public String getCodigoDni() {
return codigoDni;
}
public void setCodigoDni(String codigoDni) {
this.codigoDni = codigoDni;
}
public String getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(String fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
@Override
public String toString() {
return "Dni{" +
"id=" + id +
", nombre='" + nombre + '\'' +
", apellidos='" + apellidos + '\'' +
", direccion='" + direccion + '\'' +
", fotoPerfil='" + fotoPerfil + '\'' +
", codigoDni='" + codigoDni + '\'' +
", fechaNacimiento=" + fechaNacimiento +
'}';
}
}
失败的查询:
1."create table dni (id bigint not null, apellidos varchar(255), codigo_dni varchar(255), direccion varchar(255), fecha_nacimiento varchar( 255), foto_perfil varchar(255), nombre varchar(255), 主键 (id)) engine=MyISAM"
2."create table hibernate_sequence (next_val bigint) engine=MyISAM"
我尝试了什么:
--> 放@Table(name = dni)
--> 把这个放在 pom.xml org.hibernate.dialect.MySQL5Dialect
--> 把这个放在 application.properties spring.jpa.properties.hibernate.globally_quoted_identifiers=true
这一切都不起作用
首先,当您只创建一个注解作为 @Entity
并且对手动数据库或 H2 数据库有足够的依赖性时,Spring 引导将创建一个 table 与 class.
同名
解决方案:
添加 H2 数据库依赖以获取 hibernate_sequence table。您将在 pom.xml 中获得 H2 数据库依赖,如下所示:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
或
您可以为 MYSQL 添加依赖项并使用 application.properties 文件手动连接数据库
pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/dnischema
spring.datasource.username=root
spring.datasource.password=root
# Hibernate properties
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
# create, create-drop
spring.jpa.hibernate.ddl-auto=update
如果您正在使用上述步骤,请首先使用命令 create database dnischema
.
在 Mysql 中创建一个数据库
使用此解决方案,您无需创建单独的 table spring 启动将为您创建 table。
我想用 mysql 服务器中的信息创建一个名为 dni 的 table。
@Entity
public class Dni implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false, updatable = false)
private Long id;
private String nombre;
private String apellidos;
private String direccion;
private String fotoPerfil;
private String codigoDni;
private String fechaNacimiento;
public Dni() {
}
public Dni(Long id, String nombre, String apellidos, String direccion, String fotoPerfil, String codigoDni, String fechaNacimiento) {
this.id = id;
this.nombre = nombre;
this.apellidos = apellidos;
this.direccion = direccion;
this.fotoPerfil = fotoPerfil;
this.codigoDni = codigoDni;
this.fechaNacimiento = fechaNacimiento;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellidos() {
return apellidos;
}
public void setApellidos(String apellidos) {
this.apellidos = apellidos;
}
public String getDireccion() {
return direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public String getFotoPerfil() {
return fotoPerfil;
}
public void setFotoPerfil(String fotoPerfil) {
this.fotoPerfil = fotoPerfil;
}
public String getCodigoDni() {
return codigoDni;
}
public void setCodigoDni(String codigoDni) {
this.codigoDni = codigoDni;
}
public String getFechaNacimiento() {
return fechaNacimiento;
}
public void setFechaNacimiento(String fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
@Override
public String toString() {
return "Dni{" +
"id=" + id +
", nombre='" + nombre + '\'' +
", apellidos='" + apellidos + '\'' +
", direccion='" + direccion + '\'' +
", fotoPerfil='" + fotoPerfil + '\'' +
", codigoDni='" + codigoDni + '\'' +
", fechaNacimiento=" + fechaNacimiento +
'}';
}
}
失败的查询:
1."create table dni (id bigint not null, apellidos varchar(255), codigo_dni varchar(255), direccion varchar(255), fecha_nacimiento varchar( 255), foto_perfil varchar(255), nombre varchar(255), 主键 (id)) engine=MyISAM"
2."create table hibernate_sequence (next_val bigint) engine=MyISAM"
我尝试了什么:
--> 放@Table(name = dni)
--> 把这个放在 pom.xml org.hibernate.dialect.MySQL5Dialect
--> 把这个放在 application.properties spring.jpa.properties.hibernate.globally_quoted_identifiers=true
这一切都不起作用
首先,当您只创建一个注解作为 @Entity
并且对手动数据库或 H2 数据库有足够的依赖性时,Spring 引导将创建一个 table 与 class.
解决方案:
添加 H2 数据库依赖以获取 hibernate_sequence table。您将在 pom.xml 中获得 H2 数据库依赖,如下所示:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
或
您可以为 MYSQL 添加依赖项并使用 application.properties 文件手动连接数据库
pom.xml
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/dnischema
spring.datasource.username=root
spring.datasource.password=root
# Hibernate properties
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
# create, create-drop
spring.jpa.hibernate.ddl-auto=update
如果您正在使用上述步骤,请首先使用命令 create database dnischema
.
使用此解决方案,您无需创建单独的 table spring 启动将为您创建 table。