一、目的

Hibernate Envers的目的是提供应用程序实体数据的历史版本,记录执行数据变更历史。

二、用途

Hibernate Envers记录的审计数据,主要用于意外丢失数据找回、审查数据合法性、辅助问题分析等用途。一般直接在数据库执行sql查询分析即可。

三、实现原理

为每个Audited的表创建一个对应的审计数据存储表,然后借助Hibernate Listener机制把对数据的增删改操作记录到审计表。(由此引申出的问题:随着业务操作的频繁,审计表数据增长很快)。

四、配置方法

以下是基于Spring的配置:

1. 配置Envers事件监听器

    <bean id="sessionFactory" class="……Bean"><property name="eventListeners"><map><entry key="post-insert" value-ref="enversEventListener" /><entry key="post-update" value-ref="enversEventListener" /><entry key="post-delete" value-ref="enversEventListener" /><entry key="post-collection-recreate" value-ref="enversEventListener" /><entry key="pre-collection-remove" value-ref="enversEventListener" /><entry key="pre-collection-update" value-ref="enversEventListener" /></map></property></bean><bean name="enversEventListener" class="org.hibernate.envers.event.AuditEventListener" />

2. 配置Envers相关属性

<property name="hibernateProperties"><!-- 配置版本数据 --><props><!--配置审计表名的后缀,默认为空  --><prop key="org.hibernate.envers.audit_table_suffix"></prop><!--配置审计表名的前缀,默认为_AUD  --><prop key="org.hibernate.envers.audit_table_prefix">V_</prop><!--配置审计表中记录版本号的字段名称  --><prop key="org.hibernate.envers.revision_field_name">VER</prop><!--配置审计表中数据操作类型的字段名称,0:新增   1:修改   2:删除  --><prop key="org.hibernate.envers.revision_type_field_name">REVTYPE</prop><!--配置是否支持关联表修改时记录修改记录,默认为true  --><prop key="org.hibernate.envers.revision_on_collection_change">true</prop><!--配置是否不对乐观锁字段修改时记录修改记录,即使用Version字段,默认值为true  --><prop key="org.hibernate.envers.do_not_audit_optimistic_locking_field">true</prop><!--配置是否在删除操作时,记录所有字段还是只记录id值。默认为false    false:只记录id   true:记录全部字段  --><prop key="org.hibernate.envers.store_data_at_delete">true</prop><!--配置审计表的schema,默认为null  --><prop key="org.hibernate.envers.default_schema">DateBaseName</prop><!--配置审计表的catalog,默认为null  --><prop key="org.hibernate.envers.default_catalog"></prop></props></property>

3. 实体对象配置

给要增加审计记录的实体添加注解。

@Audited 标记该实体类或属性支持数据修改记录。

@NotAudited 标记该属性不支持数据修改记录。

@RevisionEntity 实现为数据修改记录表保存其他自定义内容

@RevisionTimestamp 记录修改时间,必须配合@RevisionEntity使用

@RevisionNumber 修改记录表的版本id 通常是配置成主键

给创建审计记录的实体添加注解

@Audited
public class AttGroup

参考:http://www.blogjava.net/xmatthew/archive/2010/08/21/329521.html

下面是使用Hibernate Envers后,操作数据生成的审计数据。

1. 数据库中新增数据

2.审计表中自动新增数据,但是,多了VER、REVTYPE字段,REVTYPE为0表示执行新增操作

3. 执行修改操作

4.修改之后,审计表中增加一条数据,VRE递增,REVTYPE为1,表示执行修改操作

5.执行删除操作

6.删除之后,审计表中又增加一条数据,VER递增,REVTYPE为2,表示执行删除操作

Hibernate Envers相关推荐

  1. java 持久化线程_java – Spring Hibernate Envers多线程 – 会话关...

    我们使用Hibernate(使用JPA)和Hibernate Envers来持久化对象的历史. Web应用程序运行许多线程,其中一些是通过其他应用程序的RMI方法调用创建的,其中一些是由应用程序本身创 ...

  2. hibernate envers实践总结

    1.简介 Envers模块是一个核心的Hibernate模型,可与Hibernate和JPA一起使用.事实上,你可以在Hibernate工作的任何地方使用Envers,无论它是独立的,在WildFly ...

  3. 如何使用Hibernate Envers审核数据,包括用户名信息

    最近,我一直在一个项目中工作,该项目需要审核所有数据库事务,包括用户名.为此,我一直在使用Hibernate ORM Envers,它旨在实现持久类的简单审计/版本控制. 为了在这篇文章中展示如何使用 ...

  4. 如何在Hibernate中维护表的历史记录

    为了维护数据库的历史记录或跟踪数据库表行的修改,我们创建了一个版本表,其中包含与原始表相同的字段.每当原始表被更改时,我们都会在版本表中创建另一个条目. 因此,对于每个更新查询,我们都必须在版本表中编 ...

  5. java spring hiberate_Java程序员:Spring Boot和Hibernate一起使用的技巧

    Hibernate不需要多介绍,它是Java中最受欢迎的ORM.同样,Spring Boot是功能最强大且易于使用的框架.本文并不是描述一些关于Hibernate或Spring Boot的用法,因为有 ...

  6. Spring系列学习之Spring Data Envers数据访问

    英文原文:https://spring.io/projects/spring-data-envers 目录 概述 快速开始 学习 文档 概述 该项目是Spring Data JPA项目的扩展,允许访问 ...

  7. Java数据审计工具:Envers and JaVers比较

    在Java世界中,有两种数据审计工具:Envers和JaVers. Envers已经存在了很长时间,它被认为是主流. JaVers提供全新的方法和技术独立性. 如果您考虑哪种工具更适合您的项目,本文是 ...

  8. JPA Audit and Envers

    Background 在一些数据敏感的项目, 特别是配置表, 我们需要记录每一次对表的甚至每个值的改动, 并把改动的数据存放到另一张表中. 以前我们可能会用数据库trigger来实现, 但trigge ...

  9. Hibernate升级到5.4.18.final的过程踩过的坑

    目录 1. 抛javax.persistence.TransactionRequiredException异常,在没有事务时 2. 执行save/insert/delete相关的DB操作后,没有生效也 ...

最新文章

  1. 完美解决网站PNG图标在IE6下的透明显示
  2. mysql 缓存怎么设置_mysql中缓存如何设置
  3. 无服务器计算将会取代容器?
  4. C语言eigen存为txt文件,如何为使用Eigen(C线性代数的模板库)的C项目编写一个makefile?...
  5. java的class和object_Java中Class/Object/T的关系
  6. SQL Server 2005新特性之使用with关键字解决递归父子关系
  7. 【原创】浅析密码学在互联网支付中的应用|RSA,Hash,AES,DES,3DES,SHA1,SHA256,MD5,SSL,Private Key,Public Key...
  8. 服务器安装SSH服务:
  9. 乐优商城(02)--商品分类
  10. SecureCRT 中文(附上1.解决SecureCRT乱码问题2.解决Hostname lookup failed: host not found问题)
  11. 计算机组装维修设置还原点,win10的还原点设定还原后安装的软件还在吗?
  12. 互联网巨头“赢家通吃”,会产生哪些严重后果?
  13. iphone及ipad屏幕尺寸参考
  14. Java期末复习基础知识整理(有点长)
  15. netty之微信-IM简介(二)
  16. 关于nodejs发送带参数的post请求调用人人网api
  17. 计算机应该更新,电脑更新要多久
  18. 2977 二叉堆练习1 codevs
  19. 今日学习 2022年11月14日
  20. Mac绘图软件:Paint X

热门文章

  1. MINA框架使用总结
  2. 2022-2028全球与中国实时定位系统(RTLS)市场现状及未来发展趋势
  3. Retrofit跟OkHttp源码分析
  4. ubuntu下安装迅雷
  5. 大数据处理之魔幻的NULL
  6. 通过nginx转发WebSocket
  7. ubtunu打开firefox_虚拟机Ubuntu下安装Firefox浏览器
  8. NSX-T 系列:第 10部分 - 添加和配置T0网关
  9. 集中注意力,排除干扰
  10. 如何评价小米手机第二代M2