我有一个使用 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/