java - tutorial - Pruebas de primavera/hibernación: inserción de datos de prueba después de la creación de DDL
spring unit test (3)
Estoy intentando encontrar una forma de indicar a Hibernate "siempre que crees esta tabla, inserta estas filas inmediatamente después"
Desde Hibernate 3.1, puede incluir un archivo llamado import.sql
en la ruta de import.sql
de tiempo de ejecución de Hibernate y en el momento de la exportación del esquema, Hibernate ejecutará las declaraciones SQL contenidas en ese archivo una vez que se haya exportado el esquema.
Esta función se anunció en la publicación del blog import.sql de Rotterdam JBug and Hibernate :
import.sql: importa datos fácilmente en tus pruebas unitarias
Hibernate tiene una pequeña característica que está muy poco documentada y es desconocida. Puede ejecutar un script SQL durante la creación de
SessionFactory
justo después de la generación del esquema de la base de datos para importar datos en una base de datos nueva. Solo necesita agregar un archivo llamadoimport.sql
en la raíz de su ruta deimport.sql
y establecercreate
ocreate-drop
como su propiedadhibernate.hbm2ddl.auto
.Lo uso para Hibernate Search in Action ahora que he iniciado el capítulo de consulta. Inicializa mi base de datos con un nuevo conjunto de datos para mis pruebas unitarias. JBoss Seam también lo usa mucho en los diversos ejemplos.
import.sql
es una característica muy simple pero es bastante útil en el momento. Recuerde que el SQL puede depender de su base de datos (¡portabilidad!).
#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'');
Para obtener más información acerca de esta función, consulte el blog de Eyal , escribió una pequeña entrada al respecto. Recuerde que si desea agregar objetos de base de datos adicionales (índices, tablas, etc.), también puede usar la función de objetos de base de datos auxiliares.
Todavía no está realmente documentado.
Tengo una aplicación web Spring / Hibernate que tiene algunas pruebas de integración que se ejecutan en una base de datos HSQL en memoria. Hibernate toma esta base de datos en blanco y crea todas mis tablas de prueba y restricciones gracias a hbm2ddl = create. Sin embargo, tengo un nuevo bean que comprueba un valor de configuración particular de la base de datos durante su método afterPropertiesSet (), por lo que cuando este bean se inicializa, tal fila debe existir en la base de datos.
¿Hay alguna buena manera de configurar un equivalente de Java / Spring / Hibernate de los dispositivos de prueba de Rail? Estoy intentando encontrar una forma de indicar a Hibernate "siempre que crees esta tabla, inserta estas filas inmediatamente después". No pude encontrar una devolución de llamada o un enlace que podría agregar, pero tal vez haya otra manera.
En Hibernate 3.6, la configuración que permite ejecutar comandos sql arbitrarios es:
hibernate.hbm2ddl.import_files
Consulte en http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/ , notando que hay un error en la documentación: la propiedad es import_files, con una s al final.
Si está hablando de pruebas JUnit y está usando AbstractTransactionalDataSourceSpringContextTests hay métodos que puede anular, como onSetupBeforeTransaction que proporcionan un onSetupBeforeTransaction para rellenar previamente los datos de la tabla de prueba, etc.