Подтвердить что ты не робот

Spring/Спящий режим: вставка тестовых данных после создания DDL

У меня есть Spring/Hibernate webapp, который имеет некоторые интеграционные тесты, которые выполняются в базе данных HSQL в памяти. Hibernate берет эту пустую базу данных и создает все мои тестовые таблицы и ограничения благодаря hbm2ddl = create. Однако у меня есть новый bean, который проверяет конкретное значение конфигурации из базы данных во время своего метода afterPropertiesSet(), поэтому, когда этот bean инициализируется, такая строка должна существовать в базе данных.

Есть ли какой-либо хороший способ настроить эквивалент Java/ Spring/Hibernate контрольных приборов Rail? Я пытаюсь найти способ сообщить Hibernate "всякий раз, когда вы создаете эту таблицу, сразу вставляйте эти строки". Я не мог найти обратный вызов или крючок, который я мог бы добавить, но, возможно, там другой способ.

4b9b3361

Ответ 1

Я пытаюсь найти способ сообщить Hibernate "всякий раз, когда вы создаете эту таблицу, сразу вставляйте эти строки"

Начиная с Hibernate 3.1, вы можете включить файл с именем import.sql в пути среды выполнения Hibernate и во время экспорта схемы, Hibernate выполнит SQL-инструкции, содержащиеся в этом файле после экспорта схемы.

Эта функция была анонсирована в сообщении Rotterdam JBug и Hibernate import.sql:

import.sql: легко импортировать данные в модульные тесты

Спящий режим имеет аккуратную небольшую функцию которые в значительной степени недостаточно документированы и неизвестно. Вы можете выполнить SQL scriptво время создания SessionFactoryсразу после схемы базы данных генерация для импорта данных в свежий база данных. Вам просто нужно добавить файл named import.sql в вашем пути к классам root и установите либо create, либо create-drop как ваш hibernate.hbm2ddl.auto.

Я использую его для поиска в спящем режиме в Теперь, когда я начал главу запроса. Он инициализирует мои базы данных со свежим набором данных для мои модульные тесты. JBoss Seam также использует его много в различных примерах. import.sql - очень простая функция но весьма полезен вовремя. Запомнить что SQL может зависеть от вашей базы данных (ah переносимость!).

#import.sql file
delete from PRODUCTS
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('1', '630522577X', 'My Fair Lady', 19.98, '630522577X.jpg', 'My Fair blah blah...');
insert into PRODUCTS (PROD_ID, ASIN, TITLE, PRICE, IMAGE_URL, DESCRIPTION) values ('2', 'B00003CXCD', 'Roman Holiday ', 12.98, 'B00003CXCD.jpg', 'We could argue that blah blah');

Для получения дополнительной информации об этом, блог Eyal, он написал небольшую запись об этом. Помните, хотите ли вы добавить дополнительные объекты базы данных (индексы, таблицы и так далее), вы также можете использовать вспомогательную объекты объектов базы данных.

Это все еще не документировано.

Ответ 2

В спящем режиме 3.6 конфигурация, позволяющая запускать произвольные команды sql:

hibernate.hbm2ddl.import_files

Смотрите в http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/, заметив, что в документации есть ошибка: свойство import_files с s в конце.

Ответ 3

Если вы говорите об испытаниях JUnit и используете AbstractTransactionalDataSourceSpringContextTests, там вы можете переопределить, например onSetupBeforeTransaction, которые обеспечивают привязку к предварительно заполнению данных тестовой таблицы и т.д.