java - 如果表存在则跳过 liquibase 更改

标签 java database hibernate liquibase

liquibase 新手。我有一个由 hibernate 管理的现有架构。我现在需要删除一些表,并且我正在使用 liquibase。我编写了一个配置,成功删除了表。

但我希望仅当表存在时才运行检查,因为新安装的系统不会有该表,因为 hibernate 映射对象不再存在。

我尝试添加一个前提条件。但是,我的日志仍然表明 liquibase 失败,因为它尝试删除该表但它不存在。我做错了什么?我正在使用 Spring Boot/Java

databaseChangeLog:
  - preConditions:
      on-fail: mark_ran
      on-error: mark_ran
      tableExists:
        tableName: some_old_table
        schemaName: public
  - changeSet:
      id: 01_del_old_table
      author: some-dev-01
      comment: Remove old table
      changes:
        - dropTable:
            tableName: some_old_table

日志中出现错误:表 public.some_old_table 不存在 ...

PreconditionFailedException

这就像 ti 正在检查先决条件...但仍然未通过。

也尝试过

databaseChangeLog:
  - changeSet:
      id: zzchange-1.0-remove-xczczxc
      author: zzzz
      comment: Remove some_old_table table - no longer needed
      preConditions:
        on-fail: mark_ran
        tableExists:
          tableName: some_old_table
      changes:
        - dropTable:
            tableName: some_old_table

最佳答案

问题在于 on-fail 属性拼写不正确。 on-fail 应为 onFail

正如 @Julian 提到的,最好将一个前提条件置于特定的更改集范围内,并且注释应该在前提条件之后,尽管这不是这里的问题。

databaseChangeLog:
  - changeSet:
      id: zzchange-1.0-remove-xczczxc
      author: zzzz
      preConditions:
        onFail: mark_ran
        tableExists:
          tableName: some_old_table
      comment: Remove some_old_table table - no longer needed
      changes:
        - dropTable:
            tableName: some_old_table

关于java - 如果表存在则跳过 liquibase 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57562687/

相关文章:

java - 使用 Apache CXF 在 SOAP POST 请求中出错,但 curl 有效

java - Kestrel 指南/教程/文档?

Java Hello World 适用于 ubuntu,不适用于 Cygwin

java - 在 hibernate 中从数据库获取不同的结果

java - 开发网络中计算机之间通信的应用程序

sql - 从 MSSQL 数据库表中获取最近的经纬度?

php - 仅在 mysql 数据库中插入一次。

mysql - 需要评论页面数据库设计方面的帮助

java - OpenSessionInView 模式

java - 什么是 Hibernate 脏 session ?