java - 获取删除触发器的当前用户 - Spring MyBatis - Liquibase

标签 java mysql spring mybatis liquibase

我有一个使用 MyBatis 和 Liquibase 的 Spring 服务项目。 我制作了一个包含 INSERT/UPDATE/DELETE 触发器的审核表。

使用 INSERT/UPDATE 时,我已经存储了用户 ID,因此执行 NEW.USER_ID 不是问题,但使用 DELETE 时,我只有 OLD.USER_ID,这显然不能反射(reflect)当前用户进行的更改。

不包括一些信息,我在 liquibase 中有这个(在应该改变的地方加上*):

    <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 中工作的东西。

最佳答案

填写我如何解决这个问题。

我将基本触发器更改为

<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>

这样它就会用一些东西填充用户字段。然后,在删除之后,我编写了另一个映射器来将 ID 字段更新为调用我的服务的当前用户。

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

关于java - 获取删除触发器的当前用户 - Spring MyBatis - Liquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53377365/

相关文章:

html - 在查询输出中打印额外的列

php - 使用 php 将 csv 导入 mysql 并

java - spring mvc tomcat错误

java - 快速了解 Spring 3

java - 根据内容查找xml节点

java - 我们说 "ints are immutable"到底是什么意思

php - 如何测试 8 个字段中是否只有 1 个等于 1

java - 如何使用 Spring Boot 获取存储在 aws s3 中的音频/视频文件?

java - 如何创建 Junit 测试类并在可执行 JAR 中运行

java - 如何在父类(super class)方法中使用子类参数?