英文:
Spring boot - derby database - GenerationTarget encountered exception accepting command : Error executing DDL "drop table wire"
问题
我是春季引导世界的新手。我不知道Maven Pom.xml文件中是否存在版本冲突。
GenerationTarget遇到异常,接受命令时出现异常:通过JDBC语句执行DDL "drop table wire"
org.hibernate.tool.schema.spi.CommandAcceptanceException:通过JDBC语句执行DDL "drop table wire"时出错
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67)〜[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375)[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359)[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
在运行独立的Spring Tool Suite 4.4.7.2时出现异常
Pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.wires.springbootquickstart</groupId>
<artifactId>wires-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Wires API Sample </name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
</dependencies>
</project>
实体文件- wire类是模型层,也称为实体层
//在MVC模式中,Wire类是模型层,也称为实体层////我们需要将Wire类的对象,换句话说,wire类的实例保存到数据库中
package io.wiresapi.springbootstarter.Wires.SendWires;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Wire {
//在MVC模式中,Wire类是模型层,也称为实体层
//我们需要将Wire类的对象,换句话说,wire类的实例保存到数据库中
public Wire() {
}
public Wire(int wireId, String lPID, float wireAmount) {
super();
this.WireId = wireId;
this.LPID = lPID;
this.WireAmount = wireAmount;
}
@Id
private int WireId;
private String LPID;
private float WireAmount;
public int getWireId() {
return WireId;
}
public void setWireId(int wireId) {
WireId = wireId;
}
public String getLPID() {
return LPID;
}
public void setLPID(String lPID) {
LPID = lPID;
}
public float getWireAmount() {
return WireAmount;
}
public void setWireAmount(float wireAmount) {
WireAmount = wireAmount;
}
}
主方法
package io.wiresapi.springbootstarter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WiresAPI {
public static void main(String[] args) {
// TODO Auto-generated method stub
//SpringApplication是一个静态类
SpringApplication.run(WiresAPI.class, args);
}
}
存储库文件
package io.wiresapi.springbootstarter.Wires.SendWires;
import org.springframework.data.repository.CrudRepository;
//Spring data JPA已经为所有CRUM操作提供了一个接口
public interface WireRepository extends CrudRepository<Wire,String>{
}
控制器文件
package io.wiresapi.springbootstarter.Wires.SendWires;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WiresSendController {
@Autowired
private WiresService aWireService;
//我们将客户端的传入请求映射到适当的方法。
//获取所有电线URI
@RequestMapping("/Wires")
public List
return aWireService.getAllWires();
}
}
英文:
I am a novice in spring boot world. I don't know if it is version conflicts in the Maven Pom.xml file.
GenerationTarget encountered exception accepting command : Error executing DDL "drop table wire" via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop table wire" via JDBC Statement
at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:67) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlString(SchemaDropperImpl.java:375) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
at org.hibernate.tool.schema.internal.SchemaDropperImpl.applySqlStrings(SchemaDropperImpl.java:359) [hibernate-core-5.4.12.Final.jar:5.4.12.Final]
exception while I run my stand-alone spring tool suite 4.4.7.2
Pom.xml file
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-
4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.wires.springbootquickstart</groupId>
<artifactId>wires-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Wires API Sample </name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.derby</groupId>
<artifactId>derby</artifactId>
</dependency>
</dependencies>
</project>
Entity file- wire class is the Model layer also called the entity layer
//In a MVC pattern, the Wire class is the Model layer also called the entity layer////We need to save the objects of the Wire class in other words instances of the wire class into the
package io.wiresapi.springbootstarter.Wires.SendWires;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Wire {
//In a MVC pattern, the Wire class is the Model layer also called the entity layer
//We need to save the objects of the Wire class in other words instances of the wire class into the database
public Wire() {
}
public Wire(int wireId, String lPID, float wireAmount) {
super();
this.WireId = wireId;
this.LPID = lPID;
this.WireAmount = wireAmount;
}
@Id
private int WireId;
private String LPID;
private float WireAmount;
public int getWireId() {
return WireId;
}
public void setWireId(int wireId) {
WireId = wireId;
}
public String getLPID() {
return LPID;
}
public void setLPID(String lPID) {
LPID = lPID;
}
public float getWireAmount() {
return WireAmount;
}
public void setWireAmount(float wireAmount) {
WireAmount = wireAmount;
}
}
Main method
package io.wiresapi.springbootstarter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class WiresAPI {
public static void main(String[] args) {
// TODO Auto-generated method stub
//SpringApplication is a static class
SpringApplication.run(WiresAPI.class, args);
}
}
Repository file
package io.wiresapi.springbootstarter.Wires.SendWires;
import org.springframework.data.repository.CrudRepository;
//Spring data JPA has already an interface for all CRUM operations
public interface WireRepository extends CrudRepository<Wire,String>{
}
Controller file
package io.wiresapi.springbootstarter.Wires.SendWires;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WiresSendController {
@Autowired
private WiresService aWireService;
//We map an incoming request from the client to an appropriate method.
//Get all wires URI
@RequestMapping("/Wires")
public List<Wire> TotalWiresSent() {
return aWireService.getAllWires();
}
}
Console
:: Spring Boot :: (v2.2.6.RELEASE)
2020-09-26 14:50:32.465 INFO 19332 --- [ main] io.wiresapi.springbootstarter.WiresAPI
: Starting WiresAPI on WN-CA14R9Y6H224 with PID 19332 (C:\Users\myname\Documents\workspace-spring-
tool-suite-4-4.7.2.RELEASE\wires-api\target\classes started by bxnath1 in
C:\Users\myname\Documents\workspace-spring-tool-suite-4-4.7.2.RELEASE\wires-api)
2020-09-26 14:50:32.474 INFO 19332 --- [ main] io.wiresapi.springbootstarter.WiresAPI
: No active profile set, falling back to default profiles: default
2020-09-26 14:50:33.961 INFO 19332 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate :
Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-09-26 14:50:34.119 INFO 19332 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate :
Finished Spring Data repository scanning in 140ms. Found 1 JPA repository interfaces.
2020-09-26 14:50:35.301 INFO 19332 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer :
Tomcat initialized with port(s): 3000 (http)
2020-09-26 14:50:35.317 INFO 19332 --- [ main] o.apache.catalina.core.StandardService
: Starting service [Tomcat]
2020-09-26 14:50:35.318 INFO 19332 --- [ main] org.apache.catalina.core.StandardEngine
: Starting Servlet engine: [Apache Tomcat/9.0.33]
2020-09-26 14:50:35.635 INFO 19332 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] :
Initializing Spring embedded WebApplicationContext
2020-09-26 14:50:35.636 INFO 19332 --- [ main] o.s.web.context.ContextLoader
: Root WebApplicationContext: initialization completed in 3041 ms
2020-09-26 14:50:36.051 INFO 19332 --- [ main] com.zaxxer.hikari.HikariDataSource
: HikariPool-1 - Starting...
2020-09-26 14:50:36.053 WARN 19332 --- [ main] com.zaxxer.hikari.util.DriverDataSource :
Registered driver with driverClassName=org.apache.derby.jdbc.EmbeddedDriver was not found, trying
direct instantiation.
2020-09-26 14:50:36.914 INFO 19332 --- [ main] com.zaxxer.hikari.pool.PoolBase
: HikariPool-1 - Driver does not support get/set network timeout for connections. (Feature not
implemented: No details.)
2020-09-26 14:50:36.920 INFO 19332 --- [ main] com.zaxxer.hikari.HikariDataSource
: HikariPool-1 - Start completed.
2020-09-26 14:50:37.110 INFO 19332 --- [ main] o.hibernate.jpa.internal.util.LogHelper
: HHH000204: Processing PersistenceUnitInfo [name: default]
2020-09-26 14:50:37.333 INFO 19332 --- [ main] org.hibernate.Version
: HHH000412: Hibernate ORM core version 5.4.12.Final
2020-09-26 14:50:37.772 INFO 19332 --- [ main] o.hibernate.annotations.common.Version
: HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-09-26 14:50:38.088 INFO 19332 --- [ main] org.hibernate.dialect.Dialect
: HHH000400: Using dialect: org.hibernate.dialect.DerbyTenSevenDialect
2020-09-26 14:50:39.795 WARN 19332 --- [ main] o.h.t.s.i.ExceptionHandlerLoggedImpl
: GenerationTarget encountered exception accepting command : Error executing DDL "drop table wire"
via JDBC Statement
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "drop table wire" via
JDBC Statement
at
答案1
得分: 2
这个错误出现在Derby中,是因为默认值被设置为:spring.jpa.hibernate.ddl-auto=create-drop
你需要在你的application.properties文件中将其设置为:spring.jpa.hibernate.ddl-auto=update
。
英文:
This error appears in Derby due to the default value is set to: spring.jpa.hibernate.ddl-auto=create-drop
You have to set it to: spring.jpa.hibernate.ddl-auto=update
in your application.properties file
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论