Я разрабатываю приложение JPA, которое использует H2 для базы данных. Я хочу создать резервную копию (экспортировать как 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();
}
Это не вызывает исключение во время выполнения, но когда я попробуйте вытащить данные из базы данных, там написано, что таблица xy не найдена.
Для создания резервной копии я использую следующий запрос:
Query query = em.createNativeQuery("SCRIPT TO 'backup.sql'");
Как описано здесь .