模式验证:缺少表/缺少列-通过liquibase创建表时

时间:2019-07-26 09:08:49

标签: mysql spring-data-jpa liquibase naming-strategy

我有带liquibase的spring-boot JPA应用程序,使用Linux上的MySql作为数据库。

  1. 我通过以下方式启动应用程序来创建数据库:

    • spring.jpa.hibernate.ddl-auto = create-drop
    • spring.liquibase.enabled = false 它将按预期生成数据库表和列(camelCaseNames被转换为snake_case_name)
  2. 下一步,我使用liquibase maven插件生成changelog xml,将liquibase设置为在启动时使用给定的脚本

  3. 停止应用程序并删除所有表
  4. 将配置更改为:

    • spring.jpa.hibernate.ddl-auto = validate
    • spring.liquibase.enabled = true
  5. 数据库表是按照liquibase脚本中的定义创建的

  6. 启动失败的原因是第一个表(ConsultingDivision)
    • 模式验证:缺少表[consulting_division]
      • 丢失表的问题已通过以下方式解决:spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming。 PhysicalNamingStrategyStandardImpl
    • 架构验证:缺少列
      • 缺少列的问题应通过以下方式解决:spring.jpa.hibernate.naming.implicit-strategy = org.springframework.boot.orm.jpa.hibernate。 SpringImplicitNamingStrategy 但是它不起作用< / li>

有人遇到过这样的问题吗?

我还尝试了将隐式策略更改为其他一些可用的实现:

- spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
- spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl
- spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
- spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
- spring.jpa.hibernate.naming.implicit-strategy=org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy

但这些都不适合我的情况

欢迎任何提示;-) 谢谢

0 个答案:

没有答案