H2 错误,未使用我的 data.sql 文件创建架构
Error with H2 not creating the schema with my data.sql file
我有这个项目,我刚刚开始并使用我老师的模型创建了一个简单的 class 以映射到 H2 中。到目前为止没有问题我 运行 应用程序和 table 被生成并且我尝试了一些插入命令并且它们很好但是当我添加 data.sql 在项目拒绝生成架构的资源文件夹中。
这是我的 application.properties 文件:
# DATABASE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.username=sa
spring.datasource.password=
# JPA
spring.jpa.hibernate.ddl-auto=update
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
SuperHero.class:
@Entity
@Table(name = "super_hero")
@Data
public class SuperHero {
@Id
@Column(name="id", updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false, columnDefinition = "TEXT")
private String name;
}
data.sql 文件:
INSERT INTO super_hero(id, name) VALUES (1, 'Super Man');
这是错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'dataSourceScriptDatabaseInitializer' defined in class path resource
[org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]:
Invocation of init method failed; nested exception is
org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script
statement #1 of URL [file:/C:/Users/gabri/git/plexus-super-heroes/target/classes/data.sql]: INSERT
INTO SUPER_HERO(id, name) VALUES (1, 'Super Man'); nested exception is
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "SUPER_HERO" not found; SQL statement:
INSERT INTO SUPER_HERO(id, name) VALUES (1, 'Super Man') [42102-200]
我尝试将 table 名称更改为小写和大写,从头开始重新创建项目,但一直出现此错误。
您可以将语句放在 import.sql 而不是 data.sql 中,然后重试。 Hibernate 使用这个文件来初始化 table.
非常感谢!重命名文件后,它工作得很好。我仍然不明白为什么在另一个具有相同 pom 依赖关系的项目中,只有一个用于 java 1.8 而我的 java 11 发生这种情况。
对我来说 import.sql 也很好用,我用 data.sql 尝试了更多实验,我认为 in-memory 数据库模型最好使用 import.sql
我有这个项目,我刚刚开始并使用我老师的模型创建了一个简单的 class 以映射到 H2 中。到目前为止没有问题我 运行 应用程序和 table 被生成并且我尝试了一些插入命令并且它们很好但是当我添加 data.sql 在项目拒绝生成架构的资源文件夹中。
这是我的 application.properties 文件:
# DATABASE
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.datasource.username=sa
spring.datasource.password=
# JPA
spring.jpa.hibernate.ddl-auto=update
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
SuperHero.class:
@Entity
@Table(name = "super_hero")
@Data
public class SuperHero {
@Id
@Column(name="id", updatable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name", nullable = false, columnDefinition = "TEXT")
private String name;
}
data.sql 文件:
INSERT INTO super_hero(id, name) VALUES (1, 'Super Man');
这是错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'dataSourceScriptDatabaseInitializer' defined in class path resource
[org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]:
Invocation of init method failed; nested exception is
org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script
statement #1 of URL [file:/C:/Users/gabri/git/plexus-super-heroes/target/classes/data.sql]: INSERT
INTO SUPER_HERO(id, name) VALUES (1, 'Super Man'); nested exception is
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "SUPER_HERO" not found; SQL statement:
INSERT INTO SUPER_HERO(id, name) VALUES (1, 'Super Man') [42102-200]
我尝试将 table 名称更改为小写和大写,从头开始重新创建项目,但一直出现此错误。
您可以将语句放在 import.sql 而不是 data.sql 中,然后重试。 Hibernate 使用这个文件来初始化 table.
非常感谢!重命名文件后,它工作得很好。我仍然不明白为什么在另一个具有相同 pom 依赖关系的项目中,只有一个用于 java 1.8 而我的 java 11 发生这种情况。
对我来说 import.sql 也很好用,我用 data.sql 尝试了更多实验,我认为 in-memory 数据库模型最好使用 import.sql