java - 为什么通过data.sql文件导入时会出现此错误“创建类路径资源中定义的名称为'entityManagerFactory'的bean时出错”
问题描述
我正在建立一个 spring-boot+hibernate 项目。我创建了一个模型类“People”,并在运行项目后 h2-console 按预期创建了一个表“people”。然后我在资源文件夹中创建了一个 data.sql 文件,并在表中添加了一个导入语句。之后该程序无法运行并显示以下错误。
Hibernate:
create table people (
id bigint not null,
age integer not null,
job varchar(255),
name varchar(255) not null,
primary key (id)
)
2019-10-16 15:41:34.911 INFO 7540 --- [ main] o.h.t.schema.internal.SchemaCreatorImpl : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@fe09383'
2019-10-16 15:41:34.916 INFO 7540 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-10-16 15:41:34.963 WARN 7540 --- [ main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/D:/Azad/Workspaces/intellij/home-api/target/classes/data.sql]: insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon"); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "Robi" not found; SQL statement:
insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon") [42122-199]
2019-10-16 15:41:34.964 INFO 7540 --- [ main] com.zaxxer.hikari.HikariDataSource : testdb - Shutdown initiated...
2019-10-16 15:41:34.966 INFO 7540 --- [ main] com.zaxxer.hikari.HikariDataSource : testdb - Shutdown completed.
2019-10-16 15:41:34.969 INFO 7540 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat]
2019-10-16 15:41:34.986 INFO 7540 --- [ main] ConditionEvaluationReportLoggingListener :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2019-10-16 15:41:35.002 ERROR 7540 --- [ main] o.s.boot.SpringApplication : Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Initialization of bean failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/D:/Azad/Workspaces/intellij/home-api/target/classes/data.sql]: insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon"); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "Robi" not found; SQL statement:
insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon") [42122-199]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at com.azad.practice.homeapi.HomeApiApplication.main(HomeApiApplication.java:10) [classes/:na]
Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/D:/Azad/Workspaces/intellij/home-api/target/classes/data.sql]: insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon"); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "Robi" not found; SQL statement:
insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon") [42122-199]
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:509) ~[spring-jdbc-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.jdbc.datasource.init.ResourceDatabasePopulator.populate(ResourceDatabasePopulator.java:239) ~[spring-jdbc-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.jdbc.datasource.init.DatabasePopulatorUtils.execute(DatabasePopulatorUtils.java:49) ~[spring-jdbc-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.runScripts(DataSourceInitializer.java:202) ~[spring-boot-autoconfigure-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.initSchema(DataSourceInitializer.java:119) ~[spring-boot-autoconfigure-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.onApplicationEvent(DataSourceInitializerInvoker.java:89) ~[spring-boot-autoconfigure-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker.onApplicationEvent(DataSourceInitializerInvoker.java:37) ~[spring-boot-autoconfigure-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.publishEventIfRequired(DataSourceInitializedPublisher.java:99) ~[spring-boot-autoconfigure-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.boot.autoconfigure.orm.jpa.DataSourceInitializedPublisher.postProcessAfterInitialization(DataSourceInitializedPublisher.java:90) ~[spring-boot-autoconfigure-2.1.9.RELEASE.jar:2.1.9.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsAfterInitialization(AbstractAutowireCapableBeanFactory.java:429) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
... 15 common frames omitted
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "Robi" not found; SQL statement:
insert into people (id, age, job, name) values (1001, 26, "Robi", "Shawon") [42122-199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:451) ~[h2-1.4.199.jar:1.4.199]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:427) ~[h2-1.4.199.jar:1.4.199]
at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.199.jar:1.4.199]
at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.199.jar:1.4.199]
at org.h2.expression.ExpressionColumn.getColumnException(ExpressionColumn.java:176) ~[h2-1.4.199.jar:1.4.199]
at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:158) ~[h2-1.4.199.jar:1.4.199]
at org.h2.command.dml.Insert.prepare(Insert.java:322) ~[h2-1.4.199.jar:1.4.199]
at org.h2.command.Parser.prepareCommand(Parser.java:689) ~[h2-1.4.199.jar:1.4.199]
at org.h2.engine.Session.prepareLocal(Session.java:627) ~[h2-1.4.199.jar:1.4.199]
at org.h2.engine.Session.prepareCommand(Session.java:565) ~[h2-1.4.199.jar:1.4.199]
at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1292) ~[h2-1.4.199.jar:1.4.199]
at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:217) ~[h2-1.4.199.jar:1.4.199]
at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:205) ~[h2-1.4.199.jar:1.4.199]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-3.2.0.jar:na]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-3.2.0.jar:na]
at org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:488) ~[spring-jdbc-5.1.10.RELEASE.jar:5.1.10.RELEASE]
... 31 common frames omitted
Process finished with exit code 1
我用谷歌搜索了这个问题,在 stackoverflow.com 上找到了一些解决方案,但没有一个对我有用。
类名:com.azad.practice.homeapi.model.People
@Entity
@Table
public class People {
@Id
@GeneratedValue
private Long id;
@Column(nullable = false)
private String name;
private int age;
private String job;
protected People() {
}
public People(String name, int age, String job) {
this.name = name;
this.age = age;
this.job = job;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public Long getId() {
return id;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", age=" + age +
", job='" + job + '\'' +
'}';
}
}
数据.sql
insert into people (id, age, job, name)
values (1001, 26, "Robi", "Shawon");
应用程序属性
spring.h2.console.enabled=true
spring.jpa.properties.hibernate.generate_statistics=true
logging.level.org.hibernate.stat=debug
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.type=debug
spring.datasource.name=testdb
我希望 import 语句能够正常工作,并且我会在 h2-console 的 people 表中看到数据。
提前致谢。
解决方案
也许更改"
为'
:
values (1001, 26, "Robi", "Shawon");
至
values (1001, 26, 'Robi', 'Shawon');
我认为问题在于您的 sql 脚本的语法不正确
推荐阅读
- python - 我想将下面的代码(神经网络)从 keras 转换为 pytorch
- sql - 如何在从 AS400 读取的 SQL Server 中修复“在 T2 类型 *N 中未找到 RIGHT”?
- ios - 下载每个图像后重新加载 tableview
- .net-assembly - 装配说明 最大尺寸
- sql - Mod功能和选择
- c# - 创建可重用的 WPFToolkit 控件
- reactjs - Expo导入错误:不变的违规元素类型无效预期字符串(用于内置组件)
- c# - 使文本网格中的文本停留几秒钟
- java - 从单个整体式 springboot 应用程序对两个独立数据库中的表执行写入操作
- amazon-ec2 - 如何在 AWS 子网中创建 gRPC 网络连接?