【问题标题】:flyway + h2 in-memory db + hibernate + test causing table does not existflyway + h2 in-memory db + hibernate + test 导致表不存在
【发布时间】:2016-01-28 20:28:14
【问题描述】:

我正在使用 h2 db 进行测试,我正在使用 hibernate 自动创建表,但希望 flyway 在数据库中插入脚本。所以,我的飞行路线没有创建脚本。

首先我不确定这是否可能。但是当我使用一些插入脚本时,我的测试失败了,因为 flyway 无法插入记录,抱怨表不存在。

它似乎在 h2 创建表之前尝试运行脚本。

我正在使用 spring boot 来调用 flyway。所以,我只需要这个依赖和类路径中的一个 db.migration 文件夹来激活 flyway:

<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>

任何东西都会很棒。

如果您需要更多信息,请告诉我。

如果我在 sql 文件中添加各种创建脚本,那么它会正常工作,但我不想编写创建脚本。相反,我想依靠 hibernate 为我创建它。

谢谢

【问题讨论】:

标签: java spring hibernate h2 flyway


【解决方案1】:

我正在使用 Spring Boot,我通过在 test .properties 中为 flyway 设置 db url 解决了这个问题:

spring.datasource.url = jdbc:h2:mem:DBNAME
spring.datasource.username = sa
spring.flyway.url = jdbc:h2:mem:DBNAME
spring.flyway.baseline-on-migrate = true

【讨论】:

    【解决方案2】:

    您是否使用 Hibernate 集成器 (org.hibernate.integrator.spi.Integrator) 调用 flyway?

    如果是这样,集成器总是在休眠模式导出之前执行

    正如我所见,改变顺序的唯一方法是添加一个 SessionFactoryObserver 然后执行 flyway 迁移

    public class FlywayIntegrator implements Integrator {
        @Override
        public void integrate(Configuration c, SessionFactoryImplementor sfi,
                              SessionFactoryServiceRegistry sfsr) {
            sfi.addObserver( new SessionFactoryObserver() {
                @Override
                public void sessionFactoryCreated(SessionFactory factory) {
                    //now, after schema-export, flyway migration...
                }
    
                @Override
                public void sessionFactoryClosed(SessionFactory factory) {
                }
            } );
        }
    //... other methods
    }
    

    【讨论】:

    • 嗨,我已经在主要问题中添加了激活飞行路径的方法。
    • spring xml上的声明如何?
    • 在spring boot中,你不需要任何xml文件,只要上面给出的依赖就足以激活flyway。
    • 对不起,我不知道 spring 会如何整合它。您可以使用不同的路径并从 Hibernate Integrator 启动它。但这不会那么好,例如: Flyway flyway = new Flyway() flyway.setLocations("classpath:db/migration_after_emf"); flyway.migrate();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2019-03-03
    • 2013-10-16
    相关资源
    最近更新 更多