Spring boot Embedded Derby无法使用最新版本。

时间:2018-03-18 10:52:19

标签: spring spring-boot derby

我之前在春季启动项目中使用过嵌入式德比。但是现在我通过Spring Initializr创建了具有derby依赖性的项目。我得到以下错误: 架构' SA'不存在 然后是 org.hibernate.tool.schema.spi.CommandAcceptanceException:通过JDBC语句执行DDL时出错

当我尝试运行我创建的早期项目时,Derby工作得很好。 PFB是早期项目的控制台:

  

2018-03-18 15:34:44.346 INFO 16560 --- [restartedMain]   org.hibernate.cfg.Environment:HHH000021:字节码   提供商名称:javassist 2018-03-18 15:34:44.391 INFO 16560 --- [   restartedMain] o.hibernate.annotations.common.Version:HCANN000001:   Hibernate Commons Annotations {5.0.1.Final} 2018-03-18 15:34:44.490   ** INFO 16560 --- [restartedMain] org.hibernate.dialect.Dialect
  :HHH000400:使用方言:org.hibernate.dialect.DerbyDialect   2018-03-18 15:34:44.497 WARN 16560 --- [restartedMain]   org.hibernate.dialect.DerbyDialect:HHH000430:DerbyDialect   方言已被弃用;使用特定于版本的方言之一   **而不是2018-03-18 15:34:45.094 INFO 16560 --- [restartedMain]   org.hibernate.tool.hbm2ddl.SchemaExport:HHH000227:运行hbm2ddl   schema export 2018-03-18 15:34:45.099 ERROR 16560 --- [   restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport:HHH000389:   不成功:掉书表2018-03-18 15:34:45.099 ERROR 16560 ---   [restartedMain] org.hibernate.tool.hbm2ddl.SchemaExport:Schema   ' SA'不存在2018-03-18 15:34:45.129 WARN 16560 --- [   restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper:SQL警告   代码:10000,SQLState:01J01 2018-03-18 15:34:45.129 WARN 16560 --- [   restartedMain] o.h.engine.jdbc.spi.SqlExceptionHelper:数据库   '存储器:TESTDB'未创建,与现有数据库建立连接   代替。 2018-03-18 15:34:45.129 INFO 16560 --- [restartedMain]   org.hibernate.tool.hbm2ddl.SchemaExport:HHH000230:架构导出   完成2018-03-18 15:34:45.152 INFO 16560 --- [restartedMain]   j.LocalContainerEntityManagerFactoryBean:初始化的JPA   用于持久性单元的EntityManagerFactory'默认'

我当前使用嵌入式德比的春季启动的控制台日志:

  

2018-03-18 15:42:23.234 INFO 11312 --- [主要]   com.zaxxer.hikari.HikariDataSource:HikariPool-1 - 开始......   2018-03-18 15:42:23.237 WARN 11312 --- [主要]   ** com.zaxxer.hikari.util.DriverDataSource:已注册的驱动程序   找不到driverClassName = org.apache.derby.jdbc.EmbeddedDriver,   尝试直接实例化。 2018-03-18 15:42:23.844 INFO 11312 --- [   ** main] com.zaxxer.hikari.pool.PoolBase:HikariPool-1 - Driver   不支持连接的get / set网络超时。 (功能没有   已执行:无详细信息。)2018-03-18 15:42:23.847 INFO 11312 --- [
  main] com.zaxxer.hikari.HikariDataSource:HikariPool-1 - 开始   完成。 2018-03-18 15:42:23.937 INFO 11312 --- [主要]   j.LocalContainerEntityManagerFactoryBean:构建JPA容器   EntityManagerFactory用于持久性单元'默认' 2018年3月18日   15:42:23.969 INFO 11312 --- [主要]   o.hibernate.jpa.internal.util.LogHelper:HHH000204:处理   PersistenceUnitInfo [name:default ...] 2018-03-18 15:42:24.136   INFO 11312 --- [主要] org.hibernate.Version
  :HHH000412:Hibernate Core {5.2.14.Final} 2018-03-18 15:42:24.138   INFO 11312 --- [main] org.hibernate.cfg.Environment
  :HHH000206:未找到hibernate.properties 2018-03-18 15:42:24.199   INFO 11312 --- [主要]   o.hibernate.annotations.common.Version:HCANN000001:Hibernate   Commons Annotations {5.0.1.Final} 2018-03-18 15:42:24.380 INFO 11312   --- [main] org.hibernate.dialect.Dialect:HHH000400:使用方言:org.hibernate.dialect.DerbyTenSevenDialect   2018-03-18 15:42:25.572 WARN 11312 --- [主要]   o.h.t.s.i.ExceptionHandlerLoggedImpl:GenerationTarget   遇到异常接受命令:通过JDBC执行DDL时出错   声明

     

org.hibernate.tool.schema.spi.CommandAcceptanceException:错误   通过JDBC语句执行DDL   org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)   〜[hibernate-core-5.2.14.Final.jar:5.2.14.Final] at   org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375)   [休眠芯-5.2.14.Final.jar:5.2.14.Final]

我可以在两者之间找到的差异是,在当前日志(abv log)中它表示 com.zaxxer.hikari.util.DriverDataSource:已注册的驱动程序  找不到driverClassName = org.apache.derby.jdbc.EmbeddedDriver, 尝试直接实例化。

如果我们需要配置除了以下依赖项之外的东西来启用此德比,请告诉我。注意 - 除了上一个项目中的maven依赖项之外,我还要做任何事情。

Maven依赖:

<dependency>
 <groupId>org.apache.derby</groupId>            
 <artifactId>derby</artifactId>
 <scope>runtime</scope>         
 </dependency>

5 个答案:

答案 0 :(得分:6)

请根据需要配置“ JPA配置”。我已经配置如下。您需要在application.properties文件中添加以下配置。

# PROFILES
spring.profiles.active=dev
# JPA (JpaBaseConfiguration, HibernateJpaAutoConfiguration)
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database=default
spring.jpa.show-sql=true
# DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.continue-on-error=false
spring.datasource.generate-unique-name=false

答案 1 :(得分:0)

derby使用的默认驱动程序是org.apache.derby.jdbc.AutoloadedDriver,但是springboot和其他框架选择org.apache.derby.jdbc.EmbeddedDriver。 导致驱动程序在初次使用数据源时找不到驱动程序。

关于Schema 'SA' does not exist。 我认为您可以使用其他工具来连接derby,例如 ij 。并且它们使用的jdbc url相同。看起来好像连接了相同的数据库,但实际上不是。 这是解决问题的关键。

答案 2 :(得分:0)

将spring.jpa.hibernate.ddl-auto = update添加到您的application.properties 默认情况下是create-drop

答案 3 :(得分:0)

在appplication.properties中添加了它,并且有效

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.database=default
spring.jpa.show-sql=true

答案 4 :(得分:0)

我在application.properties中添加了以下属性,它确实有效!

spring.jpa.hibernate.ddl-auto=update