2016-06-03 22 views
1

Ich bin verwirrt über die Fehler, die ich bekomme, wenn ich versuche, eine In-Memory H2 DB für meine Spring Boot-Anwendung zu erstellen. Die entsprechende Konfiguration istMuss oder muss ich nicht eine Tabelle erstellen, die ich mit H2 auffüllen möchte?

db.url=jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;INIT=runscript from 'classpath:create.sql' 
hibernate.hbm2ddl.auto=create 

Und create.sql:

CREATE TABLE `cities` (
    `name` varchar(45) NOT NULL, 
    PRIMARY KEY (`name`) 
) ; 

INSERT INTO `cities` VALUES ('JAEN'),('ALBACETE'); 

aber ich habe den Fehler Caused by: org.h2.jdbc.JdbcSQLException: Table "CITIES" already exists;

Sonderbare ist, wenn ich die CREATE TABLE Anweisung entfernen, erhalte ich:

Caused by: org.h2.jdbc.JdbcSQLException: Table "CITIES" not found; 

Das einzige, was funktioniert, ist die Verwendung DROP TABLE IF EXISTS, aber naja, ich glaube nicht, dass ich das tun sollte.

Was ist los? Was ist der richtige Weg, um statische Daten in eine H2-Speicher-DB zu füllen?

Antwort

1

1) Hibernate Art und Weise: import.sql-Datei verwenden, oder geben Sie Dateien

spring.jpa.properties.hibernate.hbm2ddl.import_files=file1.sql,file2.sql

http://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

2) Frühling Boot: verwenden Sie die Standard schema.sql & data.sql Dateien oder Dateien angeben durch Eigenschaften

spring.datasource.schema = file1.sql spring.datasource.data = file1.sql, file2.sql

http://docs.spring.io/autorepo/docs/spring-boot/1.0.2.RELEASE/reference/html/howto-database-initialization.html