Spring启动无法创建会话

时间:2018-01-24 10:36:00

标签: sql-server spring spring-boot

创建会话时出现以下异常。

    INSERT INTO SPRING_SESSION
(
    SESSION_ID, 
    CREATION_TIME, 
    LAST_ACCESS_TIME, 
    MAX_INACTIVE_INTERVAL, 
    PRINCIPAL_NAME
) 
VALUES (?, ?, ?, ?, ?)]; 
  

无法将值NULL插入列' PRIMARY_ID'

以下是我的架构详细信息:

CREATE TABLE 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 SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)
);

CREATE UNIQUE INDEX SPRING_SESSION_IX1 ON SPRING_SESSION (SESSION_ID);
CREATE INDEX SPRING_SESSION_IX2 ON SPRING_SESSION (EXPIRY_TIME);
CREATE INDEX SPRING_SESSION_IX3 ON SPRING_SESSION (PRINCIPAL_NAME);

CREATE TABLE SPRING_SESSION_ATTRIBUTES (
    SESSION_PRIMARY_ID CHAR(36) NOT NULL,
    ATTRIBUTE_NAME VARCHAR(200) NOT NULL,
    ATTRIBUTE_BYTES IMAGE NOT NULL,
    CONSTRAINT SPRING_SESSION_ATTRIBUTES_PK PRIMARY KEY 
(SESSION_PRIMARY_ID, ATTRIBUTE_NAME),
    CONSTRAINT SPRING_SESSION_ATTRIBUTES_FK FOREIGN KEY 
(SESSION_PRIMARY_ID) REFERENCES SPRING_SESSION(PRIMARY_ID) ON DELETE CASCADE
);

CREATE INDEX SPRING_SESSION_ATTRIBUTES_IX1 
ON SPRING_SESSION_ATTRIBUTES (SESSION_PRIMARY_ID);

2 个答案:

答案 0 :(得分:2)

这个问题的解决方案很简单,在spring-session jar文件中,有org / springframework / session / jdbc文件夹,你可以在eclipse中查看。

在此文件夹下,您可以获取schema-sqlserver.sql文件,您只需要为春季会话的正确架构执行此文件。

答案 1 :(得分:0)

您正在将列PRIMARY_ID设置为主键

CONSTRAINT SPRING_SESSION_PK PRIMARY KEY (PRIMARY_ID)

由于它不是计算列或自动增量列,因此必须在每个插入上为此列指定一个值。

但是希望不填充所有行的列,然后更改设计并从该列中删除PRIMARY KEY。

然后,您可能会添加一个带有IDENTITY的新列,以便自动分配。

您可以使用此

删除约束
ALTER TABLE SPRING_SESSION 
DROP CONSTRAINT SPRING_SESSION_PK 

然后添加新主键

ALTER TABLE SPRING_SESSION 
ADD SeqNo INT IDENTITY(1,1) CONSTRAINT SPRING_SESSION_PK PRIMARY KEY