Короче говоря
Я хочу сгенерировать схему БД из сопоставлений Hibernate, а затем заменить конкретную таблицу представлением с тем же именем до запуска приложения.
Как это сделать с помощью Spring /Hibernate / DbUnit / JDBC или что-то еще?
Моя проблема в деталях
У меня есть несколько интеграционных тестов, которые выполняются для базы данных в памяти.
Есть представление AView
в реальной базе данных и отображается в коде Java как
@Entity @Table @Immutable
public class AView {}
Я генерирую схему H2 DB из отображений Hibernate для интеграционных тестов.И во время инициализации контекста тестового приложения это представление создается в виде таблицы. Из журналов:
Hibernate: drop table AView if exists
Hibernate: create table AView (...)
Из-за этого некоторые тесты не выполняются.
Идея
Чтобы это исправить, я хочу сделать схему H2 DB максимально похожей на реальную схему DB.Сначала я хочу сгенерировать схему БД из отображений Hibernate, а затем заменить таблицу AView
на AView
view.
Что я пробовал
Я нашел похожий вопрос: Как выполнить скрипт sql после генерации схемы БД, но перед запуском приложения
Я создал файл schema.sql с операторами DROP TABLE / CREATE VIEW
.Я пытался поместить файл в src / test / resources / schema.sql, но Spring не подхватил его автоматически.Я попытался указать этот файл явно в аннотации @Sql
, но он все еще не имеет видимого эффекта.
Я выполняю тесты через IntelliJ IDEA (если это важно).
Мой код
Тест и контекст приложения тестирования:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = { TestH2Config.class })
@TransactionConfiguration(defaultRollback = true)
@Transactional
public class AViewServiceIT {}
@Configuration
@PropertySource({"classpath:datasource-h2.properties"})
@EnableTransactionManagement
//@Sql({"/schema.sql"})
public class TestH2Config {}
datasource-h2.properties
datasource.driverClassName=org.h2.Driver
datasource.url=jdbc:h2:mem:itest;MODE=MSSQLServer;DB_CLOSE_ON_EXIT=FALSE;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS itest\\;SET SCHEMA itest
datasource.username=sa
datasource.password=
hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=create-drop
Версия платформы Spring - 4.1.9.RELEASE.