База данных H2 не поддерживает структуру schema.package.function

#java #spring-boot #integration-testing #h2 #in-memory-database

#java #весенняя загрузка #интеграция-тестирование #h2 #база данных в памяти

Вопрос:

В моем проекте мы используем oracle database в качестве основного приложения db и H2 в качестве базы данных в памяти для запуска только интеграционных тестов. Oracle db имеет множество функций, которые имеют структуру «schema.package.function()». Проблема в том, что я не могу воссоздать ту же функцию в H2 для тестовых случаев интеграции, поскольку H2 обрабатывает ее в форме «dbname.schemaname.functionname()».

например: когда код выполняется с oracle db, «ВЫБЕРИТЕ MDM.NEXT_KEYS.NEXT_REF_SOURCE_KEY из dual» работает. Во время тестирования интеграции на H2 выдает ошибку «DB MDM не найден». Поэтому я установил имя базы данных как MDM, а имя схемы как NEXT_KEYS в настройке h2.Это сработало. Но моя следующая функция ОПЛАЧИВАЕТСЯ.KEY_TRANSLATIONS.CORE_ENHANCED_DESC_4_KEY завершается с ошибкой, сообщающей, что «ПЛАТЕЛЬЩИКИ базы ДАННЫХ не найдены».

Изменение функций Oracle выходит за рамки уравнения, поскольку они используются несколькими командами.

Если это невозможно с H2, можете ли вы предложить хорошую альтернативную базу данных в памяти для spring boot

Ценю вашу помощь!

Комментарии:

1. База данных в памяти никогда не будет соответствовать стандартам, поддерживаемым полной СУБД. Вы используете Oracle, затем используйте Oracle в своих тестах. Используйте что-то вроде testcontainers для начальной загрузки базы данных Oracle для использования в ваших тестах.

Ответ №1:

Я смог устранить проблему. Добавление ссылки на решение здесь, чтобы это могло кому-то помочь

Установка этого флага IGNORE_CATALOGS=TRUE устранила проблему. Когда она включена, имя каталога (базы данных) игнорируется.

spring.datasource.url = jdbc:h2:mem:testdb;MODE = Oracle;IGNORE_CATALOGS=TRUE

Обратитесь к ссылке ниже https://github.com/h2database/h2database/issues/2893