DB2+;JPA抛出错误:在表中找不到列

DB2+;JPA抛出错误:在表中找不到列,db2,jpa-2.0,Db2,Jpa 2.0,当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,怎

当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中的数据库表很好,我进行了三重检查:

"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”,并且我已经对类进行了三次检查

@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,您创建了具有小写列名的表。显然,JPA没有正确地处理这个问题,并且在生成的代码中的某个地方使用了unquoted
itemid
,它被转换为大写,并且毫不奇怪,在表中找不到该列


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

使用大写的ITEMID重新创建表,并使用insertable=false重新创建实体,效果很好!ID字段似乎是从DB中解救出来的,以填充java字段。