test Primavera / Hibernate: dati di test inserendo dopo la creazione DDL
-
25-09-2019 - |
Domanda
Ho una webapp Primavera / Hibernate che ha alcuni test di integrazione che vengono eseguite su un database HSQL in memoria. Hibernate prende questo database vuoto e crea tutte le mie tavole di prova e vincoli grazie alla hbm2ddl = creare. Tuttavia, ho un nuovo bean che verifica la presenza di un particolare valore di configurazione dal database durante il suo metodo afterPropertiesSet (), e quindi quando questo bean viene inizializzato, una tale necessità fila di esistere nel database.
C'è un buon modo per impostare un Java / Primavera / Hibernate equivalente di attrezzature di prova delle ferrovie? Sto cercando di trovare un modo per dire a Hibernate "ogni volta che si crea questa tabella, inserire queste righe subito dopo". Non riuscivo a trovare una richiamata o di un gancio potrei aggiungere, ma forse c'è un altro modo.
Soluzione
Sto cercando di trovare un modo per dire a Hibernate "ogni volta che si crea questa tabella, inserire queste righe subito dopo"
Dal Hibernate 3.1, è possibile includere un file chiamato import.sql
nel classpath runtime di Hibernate e al momento dell'esportazione schema, Hibernate eseguirà le istruzioni SQL contenute in quel file dopo lo schema è stato esportato.
Questa funzione è stata annunciata nel Rotterdam JBug e import.sql posta blog di Hibernate:
import.sql: dati in modo semplice importazione nel vostro unit test
Hibernate ha una caratteristica poco pulito che è fortemente sotto-documentati e sconosciuto. È possibile eseguire uno script SQL durante la creazione
SessionFactory
subito dopo lo schema del database generazione di importare i dati in una nuova Banca dati. Hai solo bisogno di aggiungere un file chiamatoimport.sql
nel classpath radice e set siacreate
ocreate-drop
comehibernate.hbm2ddl.auto
proprietà.Io lo uso per Hibernate Cerca in Azione ora che ho iniziato il Capitolo query. Esso inizializza la mia database con una nuova serie di dati la mia unità test. JBoss Seam usa anche molto nei vari esempi.
import.sql
è una caratteristica molto semplice ma è molto utile al momento. Ricorda che l'SQL potrebbe essere dipendente il database (portabilità 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');
Per ulteriori informazioni su questo caratteristica, controllare di Eyal blog , ha ha scritto una voce bel po 'su di esso. Ricordate, se si desidera aggiungere ulteriori oggetti di database (indicatori, tabelle e così via), è anche possibile utilizzare l'ausiliare oggetti di database funzione.
E 'ancora in realtà non documentato.
Altri suggerimenti
In hibernate 3.6 la configurazione che consente di eseguire comandi SQL arbitrari è:
hibernate.hbm2ddl.import_files
Si veda in http://docs.jboss.org /hibernate/core/3.6/reference/en-US/html_single/ , notando c'è un errore nella documentazione: la proprietà è import_files, con una s, alla fine,
.Se si sta parlando di test JUnit e l'utilizzo di AbstractTransactionalDataSourceSpringContextTests c'è metodi si può ignorare come onSetupBeforeTransaction che forniscono un gancio per precompilare i dati della tabella di prova, ecc.