当前位置: 首页 > 知识库问答 >
问题:

flyway h2内存中数据库Hibernate测试导致表不存在

微生俊材
2023-03-14

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

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

似乎在h2创建表之前,它就已经在尝试运行脚本了。

我正在使用Spring靴来调用飞行路线。所以,我只需要这个依赖项和一个数据库。类路径中的migaration文件夹以激活飞行路线:

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

任何想法都会很好。

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

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

谢谢

共有2个答案

邓光耀
2023-03-14

您是否正在调用Hibernate集成器(组织.Hibernate.集成器.spi.集成器)的飞行方式?

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

正如我所看到的,更改顺序的唯一方法是添加一个会话工厂观察器,然后执行飞行路线迁移

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
}
西门胜涝
2023-03-14

我正在使用Spring启动,我通过在测试中为飞行方式设置db url来解决它.properties:

spring.datasource.url = jdbc:h2:mem:DBNAME
spring.datasource.username = sa
spring.flyway.url = jdbc:h2:mem:DBNAME
spring.flyway.baseline-on-migrate = true
 类似资料:
  • 我用spring boot创建了一个spring网络项目。想了解有关测试的实践。我需要一个内存中的嵌入式数据库,比如hsql或h2,用于具有初始schema.sql的JUnit。在主应用程序上,数据库可以是mysql或oracle 在非spring boot项目中,我们通常会有一个单独的applicationcontext.xml一个由web应用程序引用的应用程序,对于测试,我们会使用applic

  • 似乎我甚至无法运行控制台来创建它试图查找的数据库。同样的事情也发生在我刚刚跑步的时候: 或者从“应用程序”下拉菜单中启动psql: 计算机状态: 我也试图通过自制安装PostgreSql,但我也遇到了同样的问题。我还阅读了应用程序文档页面,其中指出: 当postgres.app首次启动时,它会创建$user数据库,当未指定时,这是psql的默认数据库。默认用户是$user,没有密码。 所以看起来应

  • 问题内容: 我有一个基本的Hibernate代码,我将属性“ hibernate.hbm2ddl.auto”设置为更新,因为它仍然无法在数据库中自动创建表。 这些是必需的文件: employee.hbm.xml liability.hbm.xml hibernate.cfg.xml 这是我尝试运行的Main.java: 这是我得到的错误: com.mysql.jdbc.exceptions.jdb

  • 一、内存数据库: 在SQLite中,数据库通常是存储在磁盘文件中的。然而在有些情况下,我们可以让数据库始终驻留在内存中。最常用的一种方式是在调用sqlite3_open()的时候,数据库文件名参数传递":memory:",如: rc = sqlite3_open(":memory:", &db); 在调用完以上函数后,不会有任何磁盘文件被生成,取而代之的是,一个新的数据库在纯内存中被成功创建了。

  • 奇怪的错误。感谢所有帮助。 这是我的数据库。 当我手动创建数据库并尝试使用它们时,例如 ,我收到以下错误: 当我尝试删除数据库时,我收到以下错误: 如果我尝试使用<code>rake db:create:all</code>创建数据库,我会得到以下错误: 看来我的数据库。yml还可以。但出于某种原因,它正在寻找一个名为postgres的数据库,而我的数据库中没有这个数据库。yml。 感谢任何帮助。

  • 问题内容: 我有一个带有URL的H2数据库。我使用创建表格;。然后,我使用从(空)表中选择所有内容。到目前为止,一切都很好。 但是,如果将URL更改为,唯一的区别是数据库现在仅在内存中,这给了我一个提示。我可能在这里缺少一些简单的东西,但是任何帮助将不胜感激。 问题答案: hbm2ddl在创建表后关闭连接,因此h2放弃该连接。 如果你的连接网址是这样配置的 在最后一个连接关闭时,数据库的内容会丢失