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.hibernate.exception.SQLGrammarException: could not prepare statement

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

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

我该如何解决这个问题?

谢谢

最佳答案

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

创建表 Person ( id 整数, 名字可变图形(80), 姓氏可变图形(80) );

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

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

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

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

关于java - Hibernate 为 DB2 生成错误的插入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118967/

相关文章:

java - 方法 rxExecuteBlocking 消耗所有结果 - ssh 客户端

java - Swagger UI - 可为空值

java - Spring JPA 与 Hibernate 财务序列生成

db2 - 如何在 db2 中自动递增?

sql - 在 DB2 中更改主键序列( 'Default' 到 'Always')

java - 允许动态代理转换到任何兼容的接口(interface)。不管

java - 如何查看 JRE 和/或 GAE 类的调试日志

java - Hibernate QueryTranslatorImpl HQL AST解析性能

mysql - 同一实体的多个表示正在合并错误

db2 - 从 .Net Core 调用 AS400 DB