为啥保留重复记录时h2复合主键不起作用?
Posted
技术标签:
【中文标题】为啥保留重复记录时h2复合主键不起作用?【英文标题】:why is the h2 composite primary key not working when duplicate records are persisted?为什么保留重复记录时h2复合主键不起作用? 【发布时间】:2019-07-31 14:48:59 【问题描述】:我使用时间戳和用户 ID 号使用复合主键创建了下表。当我使用相同的时间戳(硬编码)和用户 ID 将记录保存两次时,我希望主键可以防止第二条记录保存到数据库中,但事实并非如此。我的语法有什么不正确的地方吗?
CREATE TABLE EMPLOYEE (
EMPLOYEE_NAME VARCHAR (50),
EMPLOYEE_ID VARCHAR (30) NOT NULL,
EMPLOYEE_ADDRESS VARCHAR (355),
TIME_ENTERED TIMESTAMP NOT NULL
);
ALTER TABLE EMPLOYEE ADD CONSTRAINT EMPLOYEE_UNQ_KEY PRIMARY KEY(TIME_ENTERED, EMPLOYEE_ID);
【问题讨论】:
你的定义很好。但是你究竟是如何插入这些值的呢?使用INSERT INTO EMPLOYEE VALUES ('a', 'b', 'c', TIMESTAMP '2001-01-01 00:00:00'); INSERT INTO EMPLOYEE VALUES ('d', 'b', 'e', TIMESTAMP '2001-01-01 00:00:00');
H2 之类的东西会正确报告Unique index or primary key violation: "PUBLIC.PRIMARY_KEY_7 ON PUBLIC.EMPLOYEE(TIME_ENTERED, EMPLOYEE_ID)
【参考方案1】:
原来问题出在 JPA 内部。由于我每次都提供 ID,因此 JPA 会更新插入的初始记录,而不是创建新记录。
【讨论】:
以上是关于为啥保留重复记录时h2复合主键不起作用?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?
为啥 unordered_multiset 对许多相等的键不起作用