如何使用 H2 在 JPA 中 运行 导入的 sql 脚本?

How to run an imported sql script in JPA using H2?

我正在开发一个使用 H2 作为数据库的 JPA 应用程序。我想创建一个备份(导出为 sql 文件)并从网络界面导入备份。

备份 sql 文件的创建和 sql 文件的上传工作正常,但我无法获取 entityManager 以正确执行导入的 sql 文件。

我尝试从导入的 sql 创建一个文件,然后 运行 如下所示:

public void applyBackup() {
    em.flush();
    Query query = em.createNativeQuery("DROP ALL OBJECTS");
    query.executeUpdate();

    query = em.createNativeQuery("RUNSCRIPT FROM 'backup.sql'");
    query.executeUpdate();
}

这里的问题是,我从导入的 sql 创建的文件位于服务器文件夹中, 而 RUNSCRIPT 查询尝试从项目文件夹中 运行 它。

我的第二次尝试是将 sql 解析为字符串,然后将其作为 sql 命令执行:

  public void applyBackup(String sqlStr) {
    em.flush();
    Query query = em.createNativeQuery("DROP ALL OBJECTS");
    query.executeUpdate();

    query = em.createNativeQuery(sqlStr);
    query.executeUpdate();
}

这不会在执行期间引发异常,但是当我尝试从数据库中获取数据时, 它说找不到 table xy。

要创建备份,我使用以下查询:

  Query query = em.createNativeQuery("SCRIPT TO 'backup.sql'");

如所述here

我用扫描仪解析了 UploadedFile 文件的 InputStream,这弄乱了 SQL。