Spring Boot JPA data.sql 失败

Posted

技术标签:

【中文标题】Spring Boot JPA data.sql 失败【英文标题】:SpringBoot JPA data.sql failed 【发布时间】:2020-03-22 10:13:35 【问题描述】:

我想要 sql 脚本来加载我的数据。 但我的 SQL 脚本不起作用。 我不知道为什么会导致错误。

我的 data.sql 是

insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A');

我的测试代码是

 @Test
void curd() 
    Person person = new Person();
    person.setName("john");
    person.setAge(10);
    person.setBloodType("A");

    personRepository.save(person);

    List<Person> result = personRepository.findByName("john");

    assertThat(result.size()).isEqualTo(1);
    assertThat(result.get(0).getName()).isEqualTo("john");
    assertThat(result.get(0).getAge()).isEqualTo(10);
    assertThat(result.get(0).getBloodType()).isEqualTo("A");

我的域 Person 类是

@Entity
@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor
@Data
public class Person 

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@NonNull
private String name;

@NonNull
private int age;

private String hobby;

@NonNull
private String bloodType;

@Valid
@Embedded
private Birthday birthday;

private String job;

@ToString.Exclude
private String phoneNumber;

@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
@ToString.Exclude
private Block block;

我的错误是

Caused by: 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:/CCC/intellij_ex/mycontact/build/resources/test/data.sql]: insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO PERSON('id'[*], 'name', 'age', 'blood_type') VALUES (1, 'martin', 10, 'A')"; expected "identifier"; SQL statement:
insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A') 

Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of URL [file:/D:/CCC/intellij_ex/mycontact/build/resources/test/data.sql]: insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A'); nested exception is org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO PERSON('id'[*], 'name', 'age', 'blood_type') VALUES (1, 'martin', 10, 'A')"; expected "identifier"; SQL statement:
insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A') 

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "INSERT INTO PERSON('id'[*], 'name', 'age', 'blood_type') VALUES (1, 'martin', 10, 'A')"; expected "identifier"; SQL statement:
insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A')

我很长时间都在挖掘这个错误问题。但我没有发现。 请帮帮我

【问题讨论】:

查看这个问题的答案:***.com/questions/44267245/… @GeneratedValue (strategy = GenerationType.IDENTITY) 能否分享一下data.sql和schema.sql omg...我发现了问题。我使用的是 " ' " 而不是 " ` " 。感谢您的帮助... 【参考方案1】:

data.sql 代码

insert into person('id', 'name', 'age', 'blood_type') values (1, 'martin', 10, 'A');

必须改变

insert into person(`id`, `name`, `age`, `blood_type`) values (1, 'martin', 10);

【讨论】:

甚至去掉反引号【参考方案2】:

您的 ID 已生成如下。

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

这样您就可以重试已编辑的 SQL 查询。

insert into person('name', 'age', 'blood_type') values ('martin', 10, 'A');

【讨论】:

以上是关于Spring Boot JPA data.sql 失败的主要内容,如果未能解决你的问题,请参考以下文章

带有 H2 和 data.sql 的 Spring Boot Data JPA - 未找到表

播种初始数据 - 使用 data.sql 的 Spring Boot

在spring boot中进行单元测试之前,通过data.sql文件向h2数据库中插入数据

Spring Boot 使用 spring.datasource.data 的时候找不到数据文件

从 Spring Boot jar 中排除 data.sql

Spring-Boot 仅在一个配置文件中执行 data.sql