![](/img/trans.png)
[英]Hibernate fails to validate in-memory h2 database after flyway migration using Spring-Boot
[英]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.