![](/img/trans.png)
[英]@autowire error with spring-boot, JPA and CrudRepository
[英]Which steps enable SQLite with Spring-Boot and JPA?
要使用Spring-boot(版本1.2.3.RELEASE)應用程序運行SQLite,我執行了以下三個步驟:
使用Spring boot和SQLite中的SQLiteDialect類
提供JDBC驅動程序; 我們使用org.xerial:sqlite-jdbc( http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.8.7 )
配置數據源; 這里有一個spring-boot .yml文件:
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
現在,這還不夠。 它以“No enum constant org.springframework.orm.jpa.vendor.Database.SQLITE”錯誤結束:
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]
實際上, org.springframework.orm.jpa.vendor.Database類沒有SQLITE值,遺憾的是。 但是,spring doc( http://docs.spring.io/spring-framework/docs/2.5.6/api/org/springframework/orm/jpa/vendor/Database.html )指出:
如果給定的PersistenceProvider支持此處未列出的數據庫,則仍可使用完全限定的類名指定策略類。
看起來我必須:
刪除毫無意義
jpa:數據庫:SQLITE
配置件上面,和
我在正確的道路上嗎?
他們對“戰略類”有什么意義以及如何獲得或實施它?
解決方案:根據M. Deinum的評論,正確的配置如下:
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
似乎沒有“戰略類”需要實施。
我現在已經得到了:刪除的jpa: database: SQLITE
行(對應於org.springframework.orm.jpa.vendor.Database類)根本不是必需的。 這是一種方便的方式 - 對於大多數數據庫而不是SQLite。
備注:當使用Hibernate時,那個database-platform=...
條目就像Hibernate特定配置中的hibernate.dialect=that.custom.SQLiteDialect
,它會產生同樣的效果。
對於Hibernate,所謂的策略類是org.hibernate.dialect.Dialect
類的功能實現。 對於最常見的數據庫,有一個捷徑,然后您可以使用database
屬性並簡單地指定數據庫(如ORACLE
, DB2
等)。 但是,對於SQLite不存在,您需要配置特定的方言。
要指定方言,您可以使用database-platform
屬性,只需傳遞方言即可使用。
jpa:
database-platform: that.custom.SQLiteDialect
如果你想為MySQL指定一個特定的方言(例如),這也適用於org.hibernate.dialect.MySQL5InnoDBDialect
等任何其他方言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.