我正在开发一个带有envers的spring-boot(2.4.5(应用程序来审计数据。当我从头开始使用这个应用程序时,一切都很好。从应用程序中,我可以将数据保存在数据库表中,而envers将审计数据存储在审计表中。
对于数据库CI/CD,我配置了Liquibase,执行了一个变更集。创建数据库时没有任何问题。
但我的问题是,当我想在变更集中添加插入语句来创建初始数据时。如何将这些初始数据添加到审核表中?
我的零钱集:
-- changeset puser:1659003040757-1
CREATE SEQUENCE HIBERNATE_SEQUENCE START WITH 1 MAXVALUE 9999999999999999999999999999;
-- changeset puser:1659003040757-2
--preconditions onFail:WARN onError:WARN
--precondition-sql-check expectedResult:0 SELECT count(*) FROM USER_TABLES WHERE TABLE_NAME = 'AUDIT_REVISION_ENTITY';
CREATE TABLE AUDIT_REVISION_ENTITY
(
ID NUMBER(10, 0) NOT NULL,
TIMESTAMP NUMBER(19, 0) NOT NULL,
IP_ADDRESS VARCHAR2(255 CHAR),
USERNAME VARCHAR2(255 CHAR),
CONSTRAINT SYS_C0017210 PRIMARY KEY (ID)
) TABLESPACE DATAAPP;
-- changeset puser:1659003040757-3
CREATE TABLE USERS
(
ID RAW(16) NOT NULL,
CREATED_BY VARCHAR2(255 CHAR),
CREATED_DATE TIMESTAMP(6) NOT NULL,
MODIFIED_BY VARCHAR2(255 CHAR),
MODIFIED_DATE TIMESTAMP(6),
ACTIVE NUMBER(1, 0),
EMAIL VARCHAR2(200 CHAR) NOT NULL,
USER_LOGIN VARCHAR2(20 CHAR) NOT NULL,
USER_NAME VARCHAR2(200 CHAR) NOT NULL,
USER_PASSWORD VARCHAR2(256 CHAR) NOT NULL,
USER_ROLE VARCHAR2(50 CHAR) NOT NULL,
USER_SURNAME VARCHAR2(200 CHAR) NOT NULL,
CONSTRAINT SYS_C0017439 PRIMARY KEY (ID)
) TABLESPACE DATAAPP;
-- changeset puser:1659003040757-4
CREATE TABLE USERS_AUD
(
ID RAW(16) NOT NULL,
REV NUMBER(10, 0) NOT NULL,
REVTYPE NUMBER(3, 0),
CREATED_BY VARCHAR2(255 CHAR),
CREATED_DATE TIMESTAMP(6),
MODIFIED_BY VARCHAR2(255 CHAR),
MODIFIED_DATE TIMESTAMP(6),
ACTIVE NUMBER(1, 0),
EMAIL VARCHAR2(200 CHAR),
USER_LOGIN VARCHAR2(20 CHAR),
USER_NAME VARCHAR2(200 CHAR),
USER_PASSWORD VARCHAR2(256 CHAR),
USER_ROLE VARCHAR2(50 CHAR),
USER_SURNAME VARCHAR2(200 CHAR),
CONSTRAINT SYS_C0017442 PRIMARY KEY (ID, REV)
) TABLESPACE DATAAPP;
-- changeset puser:1659003040757-5
ALTER TABLE USERS_AUD
ADD CONSTRAINT FKLD7CDNHID45YC6535CECSHYOP FOREIGN KEY (REV) REFERENCES AUDIT_REVISION_ENTITY (ID);
-- changeset puser:1659003040757-6
INSERT INTO users (id, user_surname, user_name, user_login, user_password, user_role, email, created_by, created_date, active)
VALUES ('cca76b85f24d490b8df7fd8d91743835', 'APPUSER', 'APPUSER', 'APPUSER', '$2a$10$9wXu9hshOrtZ7RopythgF.XP93XbKtISBzv6QjTGBzq', 'ADMIN', 'app@appsuser.com', 'System', current_date, 1);
我的问题是变更集如何在envers审核表中插入数据
INSERT INTO users_aud ???????????????????????????????```
感谢@Neeraj的评论,我终于可以用三个插入修复了。
INSERT INTO users (id, user_surname, user_name, user_login, user_password, user_role, email, created_by, created_date, active)
VALUES ('cca76b85f24d490b8df7fd8d91743835', 'user', 'user', 'user', '$TGBzq', 'ADMIN', 'user@company.com', 'system', current_date, 1);
INSERT INTO AUDIT_REVISION_ENTITY (TIMESTAMP, IP_ADDRESS, USERNAME, ID)
VALUES (1659347410125, '0.0.0.0', 'System', HIBERNATE_SEQUENCE.NEXTVAL);
INSERT INTO USERS_AUD (ID, CREATED_BY, CREATED_DATE, MODIFIED_BY, MODIFIED_DATE, ACTIVE, USER_SURNAME, USER_NAME, USER_LOGIN, USER_PASSWORD, USER_ROLE, EMAIL, REV, REVTYPE)
SELECT 'cca76b85f24d490b8df7fd8d91743835',
'user',
current_date,
'user',
current_date,
1,
'user',
'user',
'user',
'$2jTGBzq',
'ADMIN',
'user@company.com',
rev,
0
FROM (SELECT MAX(ID) AS REV FROM AUDIT_REVISION_ENTITY);
对于少数插入件,这是一个快速解决方案;对于大量数据,我认为使用自定义变更集是更好的解决方案。