2012-08-02 7 views
7

Ich habe eine Oracle-Datenbank, wo ich Sequenzen für den Primärschlüssel verwenden muss. Das alles funktioniert gut, da ich die Sequenznummer kontrolliere. Mein Problem ist mit meinen Tests. Mit Spring erstelle ich eine HSQL db und teste dies. Diese Datenbank wird erstellt, indem alle meine Entitäten betrachtet werden. Alle meine Entitäten für die Arbeit mit Oracle haben einen Sequenznamen angegeben. Das Problem ist, dass, wenn ich die HSQL-Datenbank konstruiere, es die Sequenz nicht finden kann (was ich erwarte) Meine Tests passieren, aber ich lande mit viel Kram im Log. Das Protokoll ist mit dieser Art von Nachrichten gefüllt.Fehlende Sequenzen in HSQL zum Testen

WARN JDBCExceptionReporter:233 - SQL Error: -5501, SQLState: 42501 
ERROR JDBCExceptionReporter:234 - user lacks privilege or object not found: GENDERS_SEQ 

Weiß jemand, wie ich diese falschen Fehler entfernen kann? Kann ich HSQL die Sequenzen ignorieren lassen? Interessant in den Tests kann ich in die HSQL-Datenbank einfügen, so dass es einen eigenen internen Primärschlüsselgenerator verwenden muss.

Wer irgendwelche Ideen, wie ich diese Gruft aus dem Protokoll entfernen kann?

Dank

Antwort

3

Ich löste dies, indem ich manuell Sequenzen als Teil meines Testskripts erstellte. Nicht ideal, da würde ich lieber Spring/HSQL Kombination einrichten. Mein Code ist:

for (String sequence : sequences) { 
    entityManager.createNativeQuery("DROP SEQUENCE " + sequence + " IF EXISTS").executeUpdate(); 
    entityManager.createNativeQuery("CREATE SEQUENCE " + sequence + " as INTEGER").executeUpdate(); 
} 

wo Sequenzen ist eine Liste der Zeichenfolge, die den Namen der Sequenz sind.

Ich verwendete dies ist die @ BeforeClass-Methode für jede Testklasse. Nicht ideal, aber es löst das Problem

-2

Sie können Ihr eigenes In-Memory-db über ein Skript erstellen: how-to-initialize-in-memory-hsqldb-using-script-via-spring.

Aber ich bevorzuge arquillian für Integrationstests mit Daten.

Offenlegung: funktioniert nicht für Arquillian.

+0

Wie hilft mir das, die Sequenzen auf der DB zu setzen? Vielleicht vermisse ich hier etwas. Sorry, wenn ich bin – RNJ

1

Versuchen Sie stattdessen die H2 database; Es hat eine Funktion namens "Compatibility Modes" in der es sich wie Oracle oder HSQL verhält.

Wenn Sie den Oracle-Modus auswählen, sollten Sie in der Lage sein, die Datenbank mit denselben Skripten (oder Hibernate-Setup) zu initialisieren, die Sie für Ihre Produktion verwenden.

+0

Danke Aaron, ich werde mir das zur Mittagszeit ansehen – RNJ