【问题标题】:ERROR: duplicate key value violates unique constraint "spring_session_attributes_pk"\n Detail: Key (session_primary_id, attribute_name)错误:重复键值违反唯一约束“spring_session_attributes_pk”\n 详细信息:键(session_primary_id,attribute_name)
【发布时间】:2021-12-31 17:27:17
【问题描述】:

目前,我正在使用:

  • Spring Boot 2.2.2
  • Spring jdbc 2.5.0
  • 弹簧芯 2.5.0

有时,我在访问我的端点时遇到错误,这是堆栈跟踪,这是在从以下位置升级我的库后发生的:

  • 弹簧靴 2.1.7
  • spring jdbc 2.1.8
  • 弹簧芯2.1.8

处理 DataIntegrityViolationException:PreparedStatementCallback;

SQL [INSERT INTO SPRING_SESSION_ATTRIBUTES(SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) SELECT PRIMARY_ID, ?, ? FROM SPRING_SESSION WHERE SESSION_ID = ?];
ERROR: duplicate key value violates unique constraint \"spring_session_attributes_pk\"
    Detail: Key (session_primary_id, attribute_name)=(a9427ef5-92a4-4845-8769-e034c3b50b70, SPRING_SECURITY_CONTEXT) already exists.; nested exception is org.postgresql.util.PSQLException: 

ERROR: duplicate key value violates unique constraint \"spring_session_attributes_pk\"
    Detail: Key (session_primary_id, attribute_name)=(a9427ef5-92a4-4845-8769-e034c3b50b70, SPRING_SECURITY_CONTEXT) already exists.
    org.springframework.dao.DuplicateKeyException: PreparedStatementCallback; SQL [INSERT INTO SPRING_SESSION_ATTRIBUTES(SESSION_PRIMARY_ID, ATTRIBUTE_NAME, ATTRIBUTE_BYTES) SELECT PRIMARY_ID, ?, ? FROM SPRING_SESSION WHERE SESSION_ID = ?]; 

ERROR: duplicate key value violates unique constraint \"spring_session_attributes_pk\"
    Detail: Key (session_primary_id, attribute_name)=(a9427ef5-92a4-4845-8769-e034c3b50b70, SPRING_SECURITY_CONTEXT) already exists.; nested exception is org.postgresql.util.PSQLException:

ERROR: duplicate key value violates unique constraint \"spring_session_attributes_pk\"
    Detail: Key (session_primary_id, attribute_name)=(a9427ef5-92a4-4845-8769-e034c3b50b70, SPRING_SECURITY_CONTEXT) already exists.
    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:243)

这是我的会话表:

CREATE TABLE APP_SPRING_SESSION (
        PRIMARY_ID CHAR(36) NOT NULL,
        SESSION_ID CHAR(36) NOT NULL,
        CREATION_TIME BIGINT NOT NULL,
        LAST_ACCESS_TIME BIGINT NOT NULL,
        MAX_INACTIVE_INTERVAL INT NOT NULL,
        EXPIRY_TIME BIGINT NOT NULL,
        PRINCIPAL_NAME VARCHAR(100),
        CONSTRAINT APP_SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
);

CREATE UNIQUE INDEX APP_SPRING_SESSION_IX1 ON APP_SPRING_SESSION (SESSION_ID);
CREATE INDEX APP_SPRING_SESSION_IX2 ON APP_SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX APP_SPRING_SESSION_IX3 ON APP_SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE APP_SPRING_SESSION_ATTRIBUTES (
       SESSION_PRIMARY_ID CHAR(36) NOT NULL,
       ATTRIBUTE_NAME VARCHAR(200) NOT NULL,
       ATTRIBUTE_BYTES BYTEA NOT NULL,
       CONSTRAINT APP_SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY (SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
       CONSTRAINT APP_SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY (SESSION_PRIMARY_ID) REFERENCES APP_SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
);

有人知道如何解决这个问题吗?

【问题讨论】:

  • 永远不要混合一个等待发生的麻烦的框架版本。对每个模块使用 2.5.x(相同的 x)而不是混合搭配!。

标签: spring postgresql spring-boot spring-session


【解决方案1】:

这些错误意味着您的数据库中已经存在具有此类键的记录。 您可以清除数据库或更改键和插入查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-15
    • 2016-07-27
    相关资源
    最近更新 更多