Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 飞道+;h2内存中的db+;冬眠+;测试导致表不存在_Java_Spring_Hibernate_H2_Flyway - Fatal编程技术网

Java 飞道+;h2内存中的db+;冬眠+;测试导致表不存在

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

我使用H2DB进行测试,我使用hibernate自动创建表,但希望flyway在数据库中插入脚本。因此,我的flyway没有创建脚本

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

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

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

<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实体(表)