2016-04-08 9 views
1

Ich muss einige Standarddaten in meine Datenbank einfügen. Ich benutze Spring Boot mit der Flyway-Integration. Zum Testen verwende ich H2. Für die Produktion wird MySQL verwendet.Wie füge ich eine spezifische UUID in die h2 Datenbank ein?

Ich habe separate Flyway-Migrationsskripte erstellt, sodass ich datenbankspezifische Daten für die Standarddaten verwenden kann (das Erstellen der Tabellen erfolgt in einem gemeinsamen Skript).

Für MySQL, ich habe so etwas wie dies:

INSERT INTO survey_definition (id, name, period) 
VALUES (0x2D1EBC5B7D2741979CF0E84451C5BBB1, 'disease-activity', 'P1M'); 

Wie kann ich das gleiche tun für H2?

Ich fand nur die RANDOM_UUID() Funktion, die funktioniert, aber ich brauche eine bekannte UUID, weil ich es als Fremdschlüssel in weiteren Anweisungen verwende.

+1

eine andere Verwendung Datenbank für Tests als Produktion scheint wie eine Katastrophe in der Herstellung. Wie können Sie sicher sein, dass Ihr Code in MySQL korrekt ausgeführt wird, wenn Sie ihn erst testen? – tadman

Antwort

1

Am besten, wenn Sie eine Syntax verwenden, die für alle Datenbanken funktioniert. Ich denke, dass die meisten Datenbanken die 0x Syntax nicht unterstützen. Für H2, das funktionieren würde:

INSERT INTO survey_definition (id, name, period) 
VALUES ('2D1EBC5B7D2741979CF0E84451C5BBB1', 'disease-activity', 'P1M'); 

Aber um eine Cross-Datenbank-Syntax zu erhalten, können Sie eine benutzerdefinierte Funktion (zum Beispiel uuid) erstellen müssen und verwenden dann:

INSERT INTO survey_definition (id, name, period) 
VALUES (uuid('2D1EBC5B7D2741979CF0E84451C5BBB1'), 'disease-activity', 'P1M'); 
+0

Können Sie die benutzerdefinierte Funktion genauer erklären? Wie man das schafft und wie sieht es aus? –

+0

Das hängt von der Datenbank ab. Für H2 würde es einen Parameter haben und diesen Parameter zurückgeben. –

Verwandte Themen