DB2 + JPA throwing an error: column not found in the table

DB2 + JPA throwing an error: column not found in the table

当 JPA 尝试保留实体时,DB2-express 抛出一个似乎不可能的错误:

ReportingSQLException: "ITEMID" is not valid in the context where it is used..

INSERT INTO NULLID."DynamicDatabaseTable" ("colname", "rownumber", "value")
VALUES (?, ?, ?) [params=?, ?, ?]

既然上面的查询中没有使用ITEMID,怎么会出现这个错误呢? ITEMID是一个自动生成的列。

我已经尝试手动执行查询并且它工作正常,所以有人知道这是怎么回事吗?即使经过大量谷歌搜索,我还是一无所知。


DB2中的数据库table没有问题,我已经三重检查了:

"itemid" BIGINT NOT NULL GENERATED ALWAYS AS IDENTITY ( START WITH 1...), 
"rownumber" BIGINT NOT NULL, 
"colname" CHAR(30 OCTETS) NOT NULL, 
"value" VARCHAR(254 OCTETS)

我使用 Eclipse 向导创建了一个简单的 java "JPA Entity from a table",并且我已经三次检查 class 是否正常。

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="\"itemid\"", unique=true, nullable=false)
private long itemid;

@Column(name="\"rownumber\"", nullable=false)
private long rownumber;

@Column(name="\"colname\"", nullable=false, length=30)
private String colname;

@Column(name="\"value\"", length=254)
private String value;

为了以防万一,我也重新启动了整台计算机,但什么也没有...而且我使用的是最新版本,几周前全新安装的。

"itemid"不等于itemid -- SQL标识符默认转换为大写如果不括在双引号 .根据您的 DDL,您使用小写列名创建了 table。显然,JPA 没有正确处理这个问题,并且在生成的代码中的某处使用了未加引号的 itemid,它被转换为大写,毫不奇怪,在 table.[=13= 中找不到该列。 ]

没有理由在 SQL 中使用区分大小写的标识符,因此我建议您不要这样做以避免此类问题。