hibernate envers

本文介绍了在项目中如何利用Hibernate Envers对实体进行版本控制,以监控实体的变动。Envers支持JPA映射关系及Hibernate的扩展映射,提供历史数据查询功能,但不支持某些特定的集合类型。要启用Envers,需要在配置文件中配置监听器,并通过@Audited注解标记需要审计的实体或属性。
摘要由CSDN通过智能技术生成
       当一个系统比较大而且使用的周期比较长的话就会有很多的旧数据也称为历史数据。对于历史数据处理的方式大概分为这么几种:一,永久不在需要的数据,从磁盘中删除不留备份,这种数据在当今DT时代是不存在的;二,系统会产生历史记录但这些信息会在短周期内频繁使用,我们的处理方式是假删除,在数据表中留下记录信息,弊端是当数据量大时假数据量通常会影响我们的查询效率;三,系统会产生历史记录但这些信息会在短周期内不会被使用,只是做一个历史记录备份,我们的处理方式是将历史数据单独存储避免影响对正常数据的处理。
Hibernate envers是一个独立处理历史记录信息的框架可以和hibernate完美结合,其采用的方式则为上述第三种方式将历史信息单独存到一张表中。更详细的介绍请自行查看相应的文档。


在项目中尝试使用Envers对实体加入版本控制,以达到对实体更动进行监控的目的。

 

Hibernate Envers版本:envers-1.2.2.ga-hibernate-3.3

 

 

Envers部分功能:

 

  1. 支持JPA规范中定义的所有映射关系
  2. 支持Hibernate中扩展自JPA规范的映射关系,如自定义类型,"简单类型(String, Integer等)"的集合
  3. 使用"revision entity"为每个revision提供日志记录
  4. 查寻历史数据

Envers目前不支持的功能:

 

  1. Bags
  2. Collection of compononents
  3. @OneToMany + @JoinColumn

 

关于revision:

 

 Reference文档中
Basically, one transaction is one revision (unless the transaction didn't modify any audited entities). 

As the revisions are global,having a revision number, you can query for various entities at that revision, retrieving a (partial) view of the database at that revision.

You can find a revision number having a date, and the other way round, you can get the date at which a revision was commited.

---------------------

 

 

在JPA或Hibernate配置文件中加入Envers相关配置(为不同的EJB event添加对应Envers的listener)。

 

对于需要Audited功能的实体,在类上添加"@Audited"注释。如果只需要对类的部分property添加audit控制,则只要为对应property添加"@Audited"注释。

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值