Hibernate为DB2生成错误的insert语句

时间:2015-12-06 15:15:48

标签: java hibernate db2

我在DB2数据库中使用了hibernate。当我正在运行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

当我将查询从日志粘贴到IBM Data Studio时,我发现该查询似乎缺少字段名称的引号。有效的陈述是

insert into "PERSON" ("id", "first_name", "last_name") values (default, 'John122', 'Doe21')

我该如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

以下两个陈述之间存在差异:

create table Person ( id integer, first_name vargraphic(80), last_name vargraphic(80) );

create table "Person" ( "id" integer, "first_name" vargraphic(80), "last_name" vargraphic(80) );

第一个语句创建表PERSON,其中包含列ID,FIRST_NAME和LAST_NAME(请注意大写!)。第二个语句创建具有列id,first_name和last_name的表Person。

您似乎使用第二个定义创建了表,但正在尝试使用对第一个表定义更正的语句来更新它。

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