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:
-
verwenden Sie die SQLiteDialect Klasse aus Spring boot und SQLite
-
bieten einen JDBC-Treiber, die wir verwendet
org.xerial:sqlite-jdbc - ( http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.8.7 ) -
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:
-
entfernen Sie die sinnlos
jpa:
Datenbank: SQLITE
Konfigurations-Stück oben, und
- "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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für den Ruhezustand der sogenannte Strategie Klasse ist eine funktionale Umsetzung der
org.hibernate.dialect.Dialect
Klasse. Für die meisten gängigen Datenbank-es ist ein kurzer Schnitt und dann können Sie diedatabase
- Eigenschaft und geben Sie einfach die Datenbank (wieORACLE
,DB2
etc.). Jedoch, dass nicht existiert, SQLite, müssen Sie konfigurieren Sie den spezifischen Dialekt.Angeben, den Dialekt, den Sie verwenden können, die
database-platform
- Eigenschaft und übergeben Sie den Dialekt verwenden, um es.Dies funktioniert auch für jeden anderen Dialekt wie die
org.hibernate.dialect.MySQL5InnoDBDialect
wenn Sie möchten geben Sie eine bestimmte eine für MySQL (zum Beispiel).InformationsquelleAutor M. Deinum