shf*_*ful 5 java sqlite jpa spring-data spring-boot
为了使用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
Run Code Online (Sandbox Code Playgroud)现在,这还不够。它以“没有枚举常量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]
Run Code Online (Sandbox Code Playgroud)
不幸的是,确实org.springframework.orm.jpa.vendor.Database类没有SQLITE值。但是,spring文档(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
Run Code Online (Sandbox Code Playgroud)
似乎根本不需要实施“战略课”。
我现在知道了:删除的jpa: database: SQLITE行(与org.springframework.orm.jpa.vendor.Database类相对应)根本不是强制性的。这是一种方便的方法-对于大多数数据库,但对于SQLite而言。
备注:使用Hibernate时,该database-platform=...条目类似于hibernate.dialect=that.custom.SQLiteDialect在Hibernate特定的配置中,将具有相同的效果。
对于 Hibernate 来说,所谓的策略类是该类的功能实现org.hibernate.dialect.Dialect。对于最常见的数据库有一个捷径,然后您可以使用该database属性并简单地指定数据库(例如ORACLE等DB2)。但是 SQLite 不存在这种情况,您需要配置特定的方言。
要指定方言,您可以使用该database-platform属性并将要使用的方言传递给它。
jpa:
database-platform: that.custom.SQLiteDialect
Run Code Online (Sandbox Code Playgroud)
这也适用于任何其他方言,例如,org.hibernate.dialect.MySQL5InnoDBDialect如果您想为 MySQL 指定特定的方言。
| 归档时间: |
|
| 查看次数: |
11344 次 |
| 最近记录: |