如何在 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
我需要保留我的 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