Die Schritte aktivieren, SQLite mit Spring-Boot und JPA?

Laufen SQLite mit einer Spring-boot (Version 1.2.3.RELEASE) Anwendung, ich habe diese drei Schritte:

  1. verwenden Sie die SQLiteDialect Klasse aus Spring boot und SQLite

  2. bieten einen JDBC-Treiber, die wir verwendet
    org.xerial:sqlite-jdbc - ( http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.8.7 )

  3. konfigurieren Sie die Datenquelle, hier mit einer spring-boot .yml-Datei:

       spring:
      datasource:
        url: jdbc:sqlite:<full-path-to-file>.db
        username: ...
        password: ...
        driverClassName: org.sqlite.JDBC
        ...
      jpa:
        database: SQLITE
        dialect: that.custom.SQLiteDialect
        hibernate:
          ddl-auto: update

Nun, das ist nicht genug. Es endet mit einem "Keine enum-Konstanten org.springframework.orm.jpa.Verkäufer.Datenbank.SQLITE" Fehler:

Field error in object 'spring.jpa' on field 'database': rejected value [SQLITE]; codes [typeMismatch.spring.jpa.database,typeMismatch.database,typeMismatch.org.springframework.orm.jpa.vendor.Database,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [spring.jpa.database,database]; arguments []; default message [database]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.orm.jpa.vendor.Database' for property 'database'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type org.springframework.orm.jpa.vendor.Database for value 'SQLITE'; nested exception is java.lang.IllegalArgumentException: No enum constant org.springframework.orm.jpa.vendor.Database.SQLITE]

In der Tat die org.springframework.orm.jpa.Verkäufer.Datenbank Klasse hat keine SQLITE-Wert, leider.
Aber der Frühling doc (http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/orm/jpa/vendor/Database.html) Staaten:

Wenn eine bestimmte PersistenceProvider unterstützt eine Datenbank, die hier nicht aufgeführt sind, die Strategie-Klasse kann noch angegeben werden, mit dem voll qualifizierten Klassennamen.

Sieht das wie ich:

  1. entfernen Sie die sinnlos

    jpa:
    Datenbank: SQLITE

Konfigurations-Stück oben, und

  1. "Strategie " Klasse" statt.

Bin ich auf dem richtigen Weg hier ?

Was meinen Sie mit "Strategie " Klasse" und wie man oder das umsetzen ?

UPDATE

Lösung: Nach dem Kommentar von M. Deinum, die richtige Konfiguration lautet:

       spring:
      datasource:
        url: jdbc:sqlite:<full-path-to-file>.db
        username: ...
        password: ...
        driverClassName: org.sqlite.JDBC
        ...
      jpa:
        database-platform: that.custom.SQLiteDialect
        hibernate:
          ddl-auto: update

Scheint keine Strategie "Klasse" muss realisiert werden.

Ich habe es jetzt: Die entfernt jpa: database: SQLITE Linie (das entspricht org.springframework.orm.jpa.Verkäufer.Datenbank Klasse) ist nicht zwingend an alle. Es ist eine bequeme Art-für die meisten Datenbanken jedoch nicht SQLite.

Bemerkung: Bei der Verwendung von Hibernate ist, dass database-platform=... Eintritt ist wie hibernate.dialect=that.custom.SQLiteDialect in ein Hibernate-spezifischer Konfiguration, die würde die gleiche Wirkung.

benennen Sie dialect zu database-platform und neu starten.
Nach deinem Vorschlag (und entfernen jpa:DATABASE:SQLITE ) gelöst, in der Tat ! Toll, dass sollte irgendwann eine Antwort ?

InformationsquelleAutor shful | 2015-04-16

Schreibe einen Kommentar