为啥保留重复记录时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 键不起作用?

为啥使用整数作为 pymongo 的键不起作用?

具有复合主键查询的 JPA COUNT 不起作用

为啥 unordered_multiset 对许多相等的键不起作用

如何查看我的数据库 H2 的数据,为啥 localhost:8080/h2 控制台不起作用?

当我输入'vi .bash_profile'时,ESC键不起作用