2012-04-08 16 views
5

Sto testando un controller che restituisce una risposta JSON ma i test non riescono dopo la prima volta perché il database h2 non ripristina l'ID di incremento automatico . L'uso di fixture o la creazione manuale di oggetti ha lo stesso problema.Ripristino autoincremento in h2

@Before 
public void setUp() { 
    Fixtures.deleteAllModels(); 
    Fixtures.loadModels("data.yaml"); 
} 

Come risolvere questo problema?

risposta

12

crea il gioco app, avviare il browser con l'URL (se si esegue il gioco applicazione a livello locale):

http://localhost:9000/@db 

Indicare il db h2, e digitare il seguente comando ed eseguire:

ALTER TABLE <table_name> ALTER COLUMN <column_name> RESTART WITH 1 

Se vuoi fare questo a livello di codice, Fixtures.executeSQL() potrebbe essere utile

per ulteriori informazioni, consultare http://www.h2database.com/html/grammar.html#alter_table_alter

.210
1

Se si utilizza Primavera, ho trovato questo blog post che suggerisce di utilizzare @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)

In modo che ogni test utilizza un nuovo contesto di applicazione, il ripristino in tal modo gli incrementi db.