Java 飞道+;h2内存中的db+;冬眠+;测试导致表不存在
我使用H2DB进行测试,我使用hibernate自动创建表,但希望flyway在数据库中插入脚本。因此,我的flyway没有创建脚本 首先,我不确定这是否可能。但是当我使用一些插入脚本时,我的测试失败了,因为flyway无法插入记录,抱怨表不存在 似乎在h2创建表之前,它正在尝试运行脚本 我正在使用spring boot调用flyway。所以,我只需要这个依赖项和类路径中的db.migaration文件夹来激活flyway:Java 飞道+;h2内存中的db+;冬眠+;测试导致表不存在,java,spring,hibernate,h2,flyway,Java,Spring,Hibernate,H2,Flyway,我使用H2DB进行测试,我使用hibernate自动创建表,但希望flyway在数据库中插入脚本。因此,我的flyway没有创建脚本 首先,我不确定这是否可能。但是当我使用一些插入脚本时,我的测试失败了,因为flyway无法插入记录,抱怨表不存在 似乎在h2创建表之前,它正在尝试运行脚本 我正在使用spring boot调用flyway。所以,我只需要这个依赖项和类路径中的db.migaration文件夹来激活flyway: <dependency> <groupId>o
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
org.flywaydb flyway核心
无论如何都好
如果你需要更多的信息,请告诉我
如果我在sql文件中为各种脚本添加创建脚本,那么它可以正常工作,但我不想编写创建脚本。相反,我想依靠hibernate为我创建它
谢谢您是否使用Hibernate integrator(org.Hibernate.integrator.spi.integrator)调用flyway 如果是这样,则总是在hibernate模式导出之前执行积分器 如我所见,更改顺序的唯一方法是添加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 Boot,通过在测试中为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
您好,我在主要问题中添加了激活flyway的方法。spring xml的声明如何?在spring boot中,您不需要任何xml文件,仅上述给定的依赖项就足以激活flyway。抱歉,我不知道spring如何集成它。您可以使用不同的路径并从Hibernate Integrator启动它。但这并没有那么好,例如:Flyway Flyway=new Flyway()Flyway.setLocations(“classpath:db/migration\u after\u emf”);flyway.migrate();我一直在为类似的问题绞尽脑汁,看看这个,也许它会帮助您理解为什么没有创建JPA实体(表)