Java Hibernate为DB2生成错误的insert语句

Java Hibernate为DB2生成错误的insert语句,java,hibernate,db2,Java,Hibernate,Db2,我正在使用hibernate和DB2数据库。运行spring批处理作业时,出现以下异常: org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into "PERSON" (id, first_name, last_name) values (default, ?, ?)]; nested exception is org.hibernat

我正在使用hibernate和DB2数据库。运行spring批处理作业时,出现以下异常:

org.springframework.dao.InvalidDataAccessResourceUsageException: could not prepare statement; SQL [insert into "PERSON" (id, first_name, last_name) values (default, ?, ?)]; nested exception is org.hibernate.exception.SQLGrammarException: could not prepare statement
当我将查询从日志粘贴到IBMDataStudio时,我看到查询似乎缺少字段名的引号。有效的声明应该是

insert into "PERSON" ("id", "first_name", "last_name") values (default, 'John122', 'Doe21')
我怎样才能解决这个问题


谢谢

以下两种说法有所不同:

createtableperson(
id整数,
名字vargraphic(80),
姓氏(80)
);

创建表“Person”(
“id”整数,
“名字”vargraphic(80),
“姓氏”vargraphic(80)
);

第一条语句创建带有列ID、first_NAME和LAST_NAME(注意大写!)的PERSON表。第二条语句使用列id、first_name和last_name创建Person表

您似乎使用第二个定义创建了表,但正在尝试使用与第一个表定义正确的语句对其进行更新


TL;DR:DB2总是以大写形式创建所有表名和列名,除非名称位于(双)引号之间。

以下两种语句之间存在差异:

createtableperson(
id整数,
名字vargraphic(80),
姓氏(80)
);

创建表“Person”(
“id”整数,
“名字”vargraphic(80),
“姓氏”vargraphic(80)
);

第一条语句创建带有列ID、first_NAME和LAST_NAME(注意大写!)的PERSON表。第二条语句使用列id、first_name和last_name创建Person表

您似乎使用第二个定义创建了表,但正在尝试使用与第一个表定义正确的语句对其进行更新


TL;DR:DB2总是以大写创建所有表名和列名,除非名称在(双)引号之间。

我会尝试与Hibernate抗争。首先使用带引号的标识符几乎总是一个坏主意。只需创建表而不引用任何列名,一切都将正常工作fine@a_horse_with_no_name谢谢你的提示。我已经使用IBMDataStudio创建了这个表,它生成了这些引用。当我在不带引号的情况下手动重新创建表时,一切似乎都正常运行,我会尝试对抗Hibernate。首先使用带引号的标识符几乎总是一个坏主意。只需创建表而不引用任何列名,一切都将正常工作fine@a_horse_with_no_name谢谢你的提示。我已经使用IBMDataStudio创建了这个表,它生成了这些引用。当我在没有引号的情况下手动重新创建表时,一切似乎都正常运行。请注意,即使它将它们报告为“大写”,系统也会忽略所有后续语句的大小写。谢谢。我不知道这个案例注意,即使它报告它们为“大写”,系统将忽略所有后续语句的大小写。谢谢。我不知道这个案子