有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring数据Rest:跟踪历史表中的数据更改

我想使用Spring data Rest使用历史记录表跟踪数据的更改。我的预期行为是,对于更改数据的每个事务,一个条目将自动添加到我的历史记录表中。我不确定,但我认为在使用服务时,让事务跨越多个请求是无效的

我目前有两种选择:

1)对数据使用数据库触发器——我在这里看到的缺点是,目前我们的大多数操作都是通过Java完成的,我看不到任何通过Java实现的方法

2)使用带注释的事件处理程序——我们将为每个表的每个事件创建事件处理程序,以跟踪历史,我倾向于这样做,但我不确定这是否正确

这两个选项中哪一个更好?还有其他选择吗


共 (3) 个答案

  1. # 1 楼答案

    使用Spring数据Rest,您可以选择使用events进行任何预处理和后处理。我相信原始事务边界适用于这些事件中的任何数据库操作

  2. # 2 楼答案

    我知道几年后我会回答这个问题,但这里有另一种方法:

    创建RepositoryEventHandler

    @Component
    @RepositoryEventHandler(Code.class)
    public class CodesEventHandler {
    
        @Autowired
        private CodesRepository repository;
    
        @HandleBeforeSave
        public void handleBeforeSave(Code c) {
            // backup the existing data to history (happens to be on the same table)
            Code newC = new Code();
            BeanUtils.copyProperties(c, newC);
            CodeId newId = new CodeId();
            BeanUtils.copyProperties(c.getCodeId(), newId);
            newC.setCodeId(newId);
            Date now = new Date();
            newC.getCodeId().setValidToTs(now);
            repository.save(newC);
    
            c.setValidFromTs(now);
    
        }
    
        @HandleBeforeDelete
        public void handleBeforeDelete(Code c) {
            // same as above but this time set the end timestamp to be now
        }
    }