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.

È stato utile?

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   chiamato import.sql nel classpath   radice e set sia create o   create-drop come   hibernate.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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top