Java org.h2.jdbc.JdbcSQLException:列计数在匹配时不匹配

Java org.h2.jdbc.JdbcSQLException:列计数在匹配时不匹配,java,hibernate,jpa,h2,Java,Hibernate,Jpa,H2,我已设置了以下POJO: @Getter @Setter @AllArgsConstructor @Entity @Table(name = "SpreadsheetRequest") public class SpreadsheetRequest { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(updatable = false, nullable = false, unique = t

我已设置了以下POJO:

@Getter
@Setter
@AllArgsConstructor
@Entity
@Table(name = "SpreadsheetRequest")
public class SpreadsheetRequest {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(updatable = false, nullable = false, unique = true)
    @Getter(AccessLevel.NONE)
    @Setter(AccessLevel.NONE)
    private Integer id;

    private String spreadsheetId;
    private String name;
    private String range;

    @SuppressWarnings("unused")
    public SpreadsheetRequest() {
        setSpreadsheetId(null);
        setName(null);
        setRange(null);
    }
}
并按如下方式配置了我的环境:

spring.h2.console.enabled=true
spring.h2.console.path=/h2
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.initialization-mode=embedded
spring.jpa.properties.hibernate.hbm2ddl.import_files=classpath://resources/import.sql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create
import.sql
如下所示:

INSERT INTO SPREADSHEET_REQUEST VALUES ('DYsErzRPCLEoYYzQkemEAeerYiQ3Usyn','Test','Sheet1!A1:A12');
我在加载时不断收到以下错误:

Caused by: org.h2.jdbc.JdbcSQLException: Column count does not match; SQL statement:
INSERT INTO SPREADSHEET_REQUEST VALUES ('DYsErzRPCLEoYYzQkemEAeerYiQ3Usyn','Test','Sheet1!A1:A12') [21002-197]
是什么引起的?

原因是

列计数不匹配

您尝试插入3列,而您的实体(因此数据库中的表也)有4列。在查询中包括
id

INSERT INTO SPREADSHEET_REQUEST VALUES (1, 'DYsErzRPCLEoYYzQkemEAeerYiQ3Usyn','Test','Sheet1!A1:A12');
原因是

列计数不匹配

您尝试插入3列,而您的实体(因此数据库中的表也)有4列。在查询中包括
id

INSERT INTO SPREADSHEET_REQUEST VALUES (1, 'DYsErzRPCLEoYYzQkemEAeerYiQ3Usyn','Test','Sheet1!A1:A12');


我看到您有这个@Table(name=“SpreadsheetRequest”),那么为什么生成的sql会插入到电子表格_请求中呢?Spring默认使用org.springframework.boot.orm.jpa.SpringNamingStrategy,它会将大小写名称转换为带有下划线的大写名称。您还应该指定列列表,强制执行要使用的列及其顺序。它将解耦/保护您不受架构更改(添加列或重新排序,或删除+添加列)的影响。添加此注释@GeneratedValue(strategy=GenerationType.AUTO),然后查看您的问题是否会解决away@MarkRotteveel尝试此操作并获得以下错误:
由以下原因引起:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误“插入电子表格请求(电子表格ID、名称、范围)值[*]“预期”(“SQL语句:插入电子表格请求(电子表格ID、名称、范围)值[42001-197]
我看到您有这个@Table(NAME=“SpreadsheetRequest”)那么,为什么生成的sql要插入电子表格_请求?Spring默认使用org.springframework.boot.orm.jpa.SpringNamingStrategy,它将大小写名称转换为带下划线的大写名称。您还应该指定列列表,强制执行要使用的列及其顺序。它将解耦/保护您免受m架构更改(添加列或重新排序,或删除+添加列)在@GeneratedValue(strategy=GenerationType.AUTO)添加此注释,然后查看您的问题是否会解决away@MarkRotteveel尝试此操作并得到以下错误:
由以下原因引起:
谢谢。我已经试过了,而且效果很好。但是为什么id不是自动生成的呢?@methuselah您的insert语句没有指定列列表,所以数据库需要所有列的值。我得到了以下错误:
原因是:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误“insert INTO电子表格\u请求”(电子表格ID、名称、范围)值[*]“预期”(“SQL语句:插入电子表格请求(电子表格ID、名称、范围)值[42001-197]
我的SQL如下所示:
插入电子表格请求(电子表格ID、名称、范围)值('DYsErzRPCLEoYYzQkemEAeerYiQ3Usyn','Test','Sheet1!A12'))
可以确认Hibernate正在创建表格:
Hibernate:创建表格电子表格请求(id整数不为空,名称为varchar(255),范围为varchar(255),电子表格id为varchar(255),主键(id))
谢谢。我已经试过了,而且效果很好。但是为什么id不是自动生成的呢?@methuselah您的insert语句没有指定列列表,所以数据库需要所有列的值。我得到了以下错误:
原因是:org.h2.jdbc.JdbcSQLException:SQL语句中的语法错误“insert INTO电子表格\u请求”(电子表格ID、名称、范围)值[*]“预期”(“SQL语句:插入电子表格请求(电子表格ID、名称、范围)值[42001-197]
我的SQL如下所示:
插入电子表格请求(电子表格ID、名称、范围)值('DYsErzRPCLEoYYzQkemEAeerYiQ3Usyn','Test','Sheet1!A12'));
可以确认Hibernate正在创建表格:
Hibernate:创建表格电子表格请求(id整数不为空,名称为varchar(255),范围为varchar(255),电子表格id为varchar(255),主键(id))