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 中使用区分大小写的标识符,因此我建议您不要这样做以避免此类问题。
当 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 中使用区分大小写的标识符,因此我建议您不要这样做以避免此类问题。