如何在 PreUpdate 事件中复制 mysql 行

How to duplicate the mysql row on PreUpdate event

我需要保留我的 table 上发生的任何更改的历史记录。我有两个 table 具有完全相同的架构,一个具有额外的 id 列。如果 JPA 触发了 PreUpdate 事件,我将尝试复制记录。我能够得到这个事件。但问题是我没有从数据库中获取新记录,因为已经在编辑相同的记录。

@PreUpdate
    public void preUpdate(POItem item) {
        try{
            if(dao == null){
                AutowireHelper.getInstance().autowire(this,this.dao);
            }

            POItem fresh = dao.find(POItem.class,item.getId());

            logger.info("UPDATED");
            logger.info(item.toString());

            logger.info("CURRENT");
            logger.info(fresh.toString());

        }catch (Exception ex){
            ex.printStackTrace();
        }
    } 

我可以看到当前的和更新的都持有相同的对象,以及将要提交的更改。

从 sql table.

中获取新记录的方法是什么?

实施审计并非易事。我的建议是不要自己实施。

如果您使用的是休眠,则:
幸运的是,有一个名为 Hibernate Envers 的实体审计框架。所需要的只是一些 xml 配置和带有审计注释的标记实体。

甚至有 Spring 数据 jpa 支持检索审计版本。
以下是一些有用的链接:
Hibernate 翻转页面:http://hibernate.org/orm/envers/
参考实现:http://hantsy.blogspot.in/2013/11/auditing-with-hibernate-envers.html