Получить текущего пользователя для удаления триггера - Spring MyBatis - Liquibase - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть проект Spring Services, использующий MyBatis и Liquibase.Я создал таблицу аудита, в которой есть триггеры для INSERT / UPDATE / DELETE.

С помощью INSERT / UPDATE я уже храню идентификатор пользователя, поэтому выполнять NEW.USER_ID не проблема, но с помощью DELETE Iиметь только OLD.USER_ID, который явно не отражает текущего пользователя, вносящего изменения.

За исключением некоторой информации, у меня есть это в liquibase (обозначение * s, что должно измениться):

    <sql endDelimiter="|">
        CREATE TRIGGER DELETE_TRIGGER
        AFTER DELETE
        ON TABLE_NAME
        FOR EACH ROW
        BEGIN
        INSERT INTO TABLE_NAME_A (CHANGE_TYPE, CHANGE_ID, CHANGE_DATE)
        VALUES ('DELETE', **OLD.USER_ID**, now());
        END;
        |
    </sql>

Так что я не уверен, что заменить OLD.UPDATE_ID.Другие примеры, которые я обнаружил, часто связаны с серверами sql и mssql.Так что, может быть, я просто потерпел неудачу при поиске, так как не смог найти что-то, что могло бы работать внутри spring / mybatis / liquibase / mysql.

1 Ответ

0 голосов
/ 19 ноября 2018

Заполнение, как я решил это.

Я изменил базовый триггер на

<sql endDelimiter="|">
        CREATE TRIGGER DELETE_TRIGGER
        AFTER DELETE
        ON TABLE_NAME
        FOR EACH ROW
        BEGIN
        INSERT INTO TABLE_NAME_A (CHANGE_TYPE, CHANGE_ID, CHANGE_DATE)
        VALUES ('DELETE', user(), now());
        END;
        |
</sql>

Чтобы оно заполняло поле пользователя чем-либо. Затем после удаления я написал еще один маппер, чтобы войти и обновить поле идентификатора для текущего пользователя, вызывающего мою службу.

<update id="updateAuditTableChangeIdAfterDeletion">
    UPDATE TABLE_NAME_A
    SET CHANGE_ID = #{1}
    WHERE UNIQUE_IDENTIFIER = #{0}
      AND CHANGE_TYPE = 'DELETE'
</update>
...