Pregunta

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 limitaciones gracias a hbm2ddl = create. Sin embargo, tengo un nuevo bean que verifica un valor de configuración particular de la base de datos durante su método AfterPropertIesset (), y así que cuando se inicializa este bean, tal fila debe existir en la base de datos.

¿Hay alguna buena manera de configurar un equivalente de Java/Spring/Hibernate de los accesorios de prueba de Rail? Estoy tratando de encontrar una manera de decirle a Hibernate "Cada vez que crea esta tabla, inserte estas filas inmediatamente después". No pude encontrar una devolución de llamada o un gancho que podría agregar, pero tal vez hay otra forma.

¿Fue útil?

Solución

Estoy tratando de encontrar una manera de decirle a Hibernate "Cada vez que crea esta tabla, inserte estas filas inmediatamente después"

Desde Hibernate 3.1, puede incluir un archivo llamado import.sql En la clase de tiempo de ejecución de Hibernate y en el momento de la exportación de esquemas, Hibernate ejecutará las declaraciones SQL contenidas en ese archivo después de que se haya exportado el esquema.

Esta característica ha sido anunciada en el Rotterdam JBug y Hibernate's Import.sql entrada en el blog:

import.sql: importe fácilmente datos en sus pruebas unitarias

Hibernate tiene una pequeña característica ordenada que es muy subocumentada y desconocida. Puede ejecutar un script SQL durante el SessionFactory Creación justo después de la generación de esquemas de la base de datos para importar datos en una nueva base de datos. Solo necesita agregar un archivo llamado import.sql en tu raíz de classpath y establecer create o create-drop como tu hibernate.hbm2ddl.auto propiedad.

Lo uso para la búsqueda de hibernación en acción ahora que he comenzado 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 podría depender de su base de datos (¡AH 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 sobre esta función, verifique 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.

Otros consejos

En Hibernate 3.6, la configuración que permite ejecutar comandos SQL arbitrarios es:

hibernate.hbm2ddl.import_files

Ver 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 un S al final.

Si estás hablando de las pruebas de Junit y usando AbstractTransactionDataSourcesPringContextTests Hay métodos que puedes anular como innovador que proporcionan un gancho a los datos de la tabla de pruebas pre-poblados, etc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top