【发布时间】:2020-03-26 07:55:51
【问题描述】:
我的shema看起来像这样:
CREATE TABLE newsletter_status(
identificationnumber BIGINT GENERATED BY DEFAULT AS IDENTITY(START WITH 0) NOT NULL PRIMARY KEY,
bpid varchar(10),
consumer varchar(4) NOT NULL,
source varchar(10),
vkorg varchar(4) NOT NULL,
cryptid varchar(255) NOT NULL,
status varchar(25),
regDat timestamp,
confirmDat timestamp,
updateDat timestamp
);
CREATE TABLE scpnewsletter (version varchar(255));
CREATE INDEX bpid_index ON newsletter_status (bpid);
CREATE INDEX cryptid_index ON newsletter_status (cryptid);
在 H2 数据库中本地运行,这适用于插入。插入一个对象,其中设置了字段 consumer、source、vkorg、cryptid 和 status,其他字段不设置。数据库应生成一个识别号。而H2确实
在使用 HANA 数据库的客户 DEV 环境中运行时,插入失败,说明:
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO newsletter_status (identificationnumber,bpid,consumer,source,vkorg,cryptid,status,regDat,confirmDat,updateDat) VALUES (?,?,?,?,?,?,?,?,?,?)]; SQL state [HY000]; error code [287]; SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "IDENTIFICATIONNUMBER" column; nested exception is com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "IDENTIFICATIONNUMBER" column
它不喜欢Identificationnumber 为空。
走得更远。如果我添加一个标识号,它对 bpid 的描述与此相同:
PreparedStatementCallback; uncategorized SQLException for SQL [INSERT INTO newsletter_status (identificationnumber,bpid,consumer,source,vkorg,cryptid,status,regDat,confirmDat,updateDat) VALUES (?,?,?,?,?,?,?,?,?,?)]; SQL state [HY000]; error code [287]; SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "BPID" column; nested exception is com.sap.db.jdbc.exceptions.JDBCDriverException: SAP DBTech JDBC: [287]: cannot insert NULL or update to NULL: Not nullable "BPID" column
bpid 在 shema 中显然可以为空。这种消费领域的模糊性令人困惑。
如果 bpid 和 Identificationnumber 都设置了,那么数据库就不是问题。
我想存储一个对象,这两个 id 都可以为 null,但还想要一个唯一 id 作为 Identificationnumber。
我无法从客户那里调试 DEV 环境。知道这里可能会出现什么问题吗?
【问题讨论】: