flyway + h2内存中的db + hibernate + test导致表不存在

时间:2015-10-28 21:12:19

标签: java spring hibernate h2 flyway

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

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

似乎它试图在h2创建表之前运行脚本。

我正在使用弹簧靴来调用飞路。所以,我只需要在类路径中使用此依赖项和db.migaration文件夹来激活flyway:

虽然会很棒。

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

如果我在sql文件中添加各种创建脚本,那么它将正常工作,但我不想编写创建脚本。相反,我想依靠hibernate为我创建它。

由于

2 个答案:

答案 0 :(得分:1)

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

如果是这样,积分器总是在hibernate schema-export

之前执行

正如我所见,改变顺序的唯一方法是添加SessionFactoryObserver然后执行flyway迁移

  private final OkHttpClient client = new OkHttpClient();

  public void run() throws Exception {
    Request request = new Request.Builder()
        .url("http://publicobject.com/helloworld.txt")
        .build();

    Response response = client.newCall(request).execute();
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

    Headers responseHeaders = response.headers();
    for (int i = 0; i < responseHeaders.size(); i++) {
      System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
    }

    System.out.println(response.body().string());
  }

答案 1 :(得分:0)

我使用的是Spring Boot,我通过在test .properties中为flyway设置db url来解决它:

Map<Boolean, List<User>> userAgeMap = users.stream()
        .collect(Collectors.partitioningBy(user -> user.getAge() > 21, Collectors.toList()));
List<User> userAboveThreshold = userAgeMap.get(Boolean.TRUE);
List<User> userBelowThreshold = userAgeMap.get(Boolean.FALSE);