【问题标题】:Spring Boot Hibernate Table does not existsSpring Boot Hibernate 表不存在
【发布时间】:2020-11-26 11:10:39
【问题描述】:

我正在使用 MySQL 数据库创建一个 Spring Boot 应用程序。 我创建了一个实体用户(通常在我启动应用程序时有一个名为用户的表?)

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


@Entity
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    
    private Integer id;
    private String prenom;
    private String nom;
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getPrenom() {
        return prenom;
    }
    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }
    public String getNom() {
        return nom;
    }
    public void setNom(String nom) {
        this.nom = nom;
    }
    
}

我还有一个 UserRepository


import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository<User, Integer>{

}

和 Application.properties

spring.jba.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/cashManager21
spring.datasource.username=springuser
spring.datasource.password=ThePassword

当我尝试从我的数据库中获取数据时出现错误: java.sql.SQLSyntaxErrorException: 表 'cashManager21.User' 不存在

谁能帮我解决这个错误?

【问题讨论】:

  • User 是 MySQL 中的保留关键字。您需要使用不同的表名或在休眠中为表名启用转义字符。
  • 或将注解@Table(name = "\"user\"") 添加到您的实体。也许看看 Bootify.io,你可以用实体初始化基本的 Spring Boot 应用程序。
  • 这可能只是一个错字? -> spring.jba ...应该是spring.jpa ...

标签: java mysql spring spring-boot hibernate


【解决方案1】:

有两种方法可以解决这个问题:--(哈哈我只知道这两种,可能还有更多)

第一个:--

手动创建数据库 (cashManager21)。 在 mysql 命令提示符下执行以下语句。

CREATE DATABASE cashManager21;

第二次 -- 将数据库 url 更改为如下一个

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/cashManager21?createDatabaseIfNotExist=true

在类级别使用@Table 注释实体类:--

@Entity
@Table(name="user")
public class User {       // in log if you see it is searching for (User) not "user" table thats why it is throwing table not found.

blah---
}

我总是会选择第二种方法。

一般:(仅供参考)

数据库和表名在 Windows 中不区分大小写,在大多数 Unix 中区分大小写。

【讨论】:

  • 好吧,实际上我做了你的第二个答案,但它不起作用,我仍然遇到问题,但 CashManager21.user 不存在...我的数据库已经存在,但我的表不存在't
  • 您添加了@Table 吗?在您的实体中
  • 你能在这里发布完整的日志跟踪吗?你在 docker 上运行吗?
猜你喜欢
  • 2017-12-27
  • 2016-10-29
  • 2019-06-12
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2017-03-07
  • 2021-09-15
相关资源
最近更新 更多