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。