簡體   English   中英

使用Spring-Boot和JPA啟用SQLite的步驟是什么?

[英]Which steps enable SQLite with Spring-Boot and JPA?

要使用Spring-boot(版本1.2.3.RELEASE)應用程序運行SQLite,我執行了以下三個步驟:

  1. 使用Spring boot和SQLite中的SQLiteDialect類

  2. 提供JDBC驅動程序; 我們使用org.xerial:sqlite-jdbc( http://mvnrepository.com/artifact/org.xerial/sqlite-jdbc/3.8.7

  3. 配置數據源; 這里有一個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支持此處未列出的數據庫,則仍可使用完全限定的類名指定策略類。

看起來我必須:

  1. 刪除毫無意義

    jpa:數據庫:SQLITE

配置件上面,和

  1. 提供一些“策略類”。

我在正確的道路上嗎?

他們對“戰略類”有什么意義以及如何獲得或實施它?

UPDATE

解決方案:根據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屬性並簡單地指定數據庫(如ORACLEDB2等)。 但是,對於SQLite不存在,您需要配置特定的方言。

要指定方言,您可以使用database-platform屬性,只需傳遞方言即可使用。

jpa:
    database-platform: that.custom.SQLiteDialect

如果你想為MySQL指定一個特定的方言(例如),這也適用於org.hibernate.dialect.MySQL5InnoDBDialect等任何其他方言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM