【问题标题】:hibernate ddl-auto don't work with MySql but it worked with H2hibernate ddl-auto 不适用于 MySql 但它适用于 H2
【发布时间】:2020-09-13 08:57:00
【问题描述】:

我已经完成了我的 Spring Boot 应用程序,现在我正在尝试使用 docker-compose 来部署它。在开发过程中,我使用了 H2 内存数据库,一切都很好。现在我正在尝试将数据源切换到 MySql 并且休眠没有在 MySql 数据库中创建任何表。然后我的 Spring Boot 应用程序尝试执行一些操作并且找不到任何表(因为它不是在启动时创建的)。 我有例外,例如

Caused by: java.sql.SQLSyntaxErrorException: Table 'db.test_run' doesn't exist

我尝试将 ddl-auto 切换为 create-drop 或 update 并得到相同的结果。我的配置是:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db
    username: user
    password: password
    driverClassName: com.mysql.cj.jdbc.Driver
    jpa:
      database: mysql
      database-platform: org.hibernate.dialect.MySQL8Dialect
      show-sql: true
      hibernate:
        ddl-auto: create
  jackson:
    serialization:
      write-dates-as-timestamps: false 

Db 正在工作,我可以通过 Idea 浏览器连接到它,我可以使用“用户”用户创建表。 docker-compose 中的 MySql 服务器配置:

 db:
    image: mysql/mysql-server
    restart: always
    environment:
      MYSQL_DATABASE: 'db'
      MYSQL_USER: 'user'
      MYSQL_PASSWORD: 'password'
      MYSQL_ROOT_PASSWORD: 'password'
    ports:
      - 3306:3306
    expose:
      - 3306 

我想我的应用程序类很好,因为它可以与 h2 DB 一起使用,并且仍然使用 h2 创建表。 我正在使用 Spring Boot 2.1.6 和最新的 docker 镜像 MySql 8.0.20

【问题讨论】:

  • 你使用 Spring Data Jpa 吗?因为 ddl-auto 是 Data JPA 特定的属性。在其他情况下,您必须使用 hbm2ddl.auto 属性。此外,自动 ddl 仅创建表,确保创建了 shema(无论如何它都应该由 docker prop 完成),并且所有必要的特权都已授予您使用该应用程序的用户。
  • 尝试使用spring.jpa.generate-ddl = true

标签: mysql spring hibernate spring-boot jpa


【解决方案1】:

好的,我解决了,“jpa”部分需要在“spring”部分下,而不是在“datasource”部分下。它与 h2 一起使用,因为 spring 数据使用 ddl-auto: create-drop 默认为嵌入式数据库。

【讨论】:

    猜你喜欢
    • 2012-04-14
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多