2

我正在使用带有 H2 数据库和 MySQL 方言的Flyway 测试扩展。

不幸的是,@FlywayTest注释使用 H2 方言执行数据库清理并以错误结束:

org.flywaydb.core.internal.dbsupport.FlywaySqlException: 
Unable to drop "PUBLIC"."site"
------------------------------
SQL State  : 42S02
Error Code : 42102
Message    : Table "site" not found; SQL statement:
DROP TABLE "PUBLIC"."site" CASCADE [42102-193]


    at org.flywaydb.core.internal.dbsupport.SchemaObject.drop(SchemaObject.java:82)
    at org.flywaydb.core.internal.dbsupport.h2.H2Schema.doClean(H2Schema.java:69)
    at org.flywaydb.core.internal.dbsupport.Schema.clean(Schema.java:148)
    at org.flywaydb.core.internal.command.DbClean$4.call(DbClean.java:184)
    at org.flywaydb.core.internal.command.DbClean$4.call(DbClean.java:181)
    at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.exec

但是,当我从控制台手动运行DROP TABLE PUBLIC.site CASCADE(无引号)时,它会成功结束。如何在 Flyway 测试扩展中强制使用方言?

4

1 回答 1

0

这不是注释的问题@FlywayTest。注释@FlywayTest调用flyway.clean()方法。
Flyway 支持 H2 仅引用模式和表的名称。
查看 Github 上的类源代码https://github.com/flyway/flyway/blob/master/flyway-core/src/main/java/org/flywaydb/core/internal/dbsupport/h2/

我认为不会有计划支持 H2 功能模式,例如 Mysql、Oracle、....

你可以在这里打开一个问题https://github.com/flyway/flyway/issues

于 2017-05-21T21:06:20.713 回答