繁体   English   中英

飞路+ H2内存数据库+休眠+测试导致表不存在

[英]flyway + h2 in-memory db + hibernate + test causing table does not exist

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

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

似乎它比h2创建表早得多尝试运行脚本。

我正在使用弹簧靴来调用飞路。 因此,我只需要此依赖关系和类路径中的db.migaration文件夹即可激活飞行路线:

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

虽然任何都很好。

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

如果我在sql文件中添加各种脚本的创建脚本,则可以正常工作,但我不想编写创建脚本。 而是我想依靠休眠为我创建它。

谢谢

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

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

如我所见,更改顺序的唯一方法是添加一个SessionFactoryObserver然后执行飞行路线迁移

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 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM