Hibernate 为 DB2 生成错误的插入语句
Hibernate generates wrong insert statement for DB2
我在 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
当我将日志中的查询粘贴到 IBM Data Studio 时,我发现该查询似乎缺少字段名称的引号。有效的语句是
insert into "PERSON" ("id", "first_name", "last_name") values (default, 'John122', 'Doe21')
我该如何解决这个问题?
谢谢
下面两种说法是有区别的:
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)
);
第一个语句创建 table PERSON,列 ID 为 FIRST_NAME 和 LAST_NAME(注意大写!)。第二条语句创建了 table Person,其列为 id、first_name 和 last_name.
您似乎使用第二个定义创建了 table,但正在尝试使用与第一个 table 定义正确的语句更新它。
TL;DR:DB2 总是以大写形式创建所有 table 和列名称,除非名称在(双)引号之间。
我在 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
当我将日志中的查询粘贴到 IBM Data Studio 时,我发现该查询似乎缺少字段名称的引号。有效的语句是
insert into "PERSON" ("id", "first_name", "last_name") values (default, 'John122', 'Doe21')
我该如何解决这个问题?
谢谢
下面两种说法是有区别的:
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)
);
第一个语句创建 table PERSON,列 ID 为 FIRST_NAME 和 LAST_NAME(注意大写!)。第二条语句创建了 table Person,其列为 id、first_name 和 last_name.
您似乎使用第二个定义创建了 table,但正在尝试使用与第一个 table 定义正确的语句更新它。
TL;DR:DB2 总是以大写形式创建所有 table 和列名称,除非名称在(双)引号之间。