Hibernate envers在Hibernate4+Spring4中的配置

近期项目要增加一个新的功能:数据变更历史记录。即针对某些实体类,要能查得到变化的历史痕迹。

假如项目界面不需要考虑展示或可读性,只需要在数据库中入库变更版本,最简便且可靠的方式就是使用Hibernate envers。关于Hibernate envers的介绍,还是请看官网:http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html/ch15.html

 

在这里,我对它的使用方法做一些描述,我的环境是Hibernate4(4.3.6)、Spring4(4.1.1),数据是MYSQL,Hibernate envers 我下载的是4.3.5的版本,因为在这样的开发环境下,旧的envers版本不适用(可能是4以下?至少,在网上搜索出来的大部分配置方法已完全不起作用)。

 

1、jar包下载

 

2、hibernate.xfg.xml: 在sessionFactory中添加envers的配置数据

  <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
      <property name="dataSource" ref="dataSource" /> 
      <property name="hibernateProperties">
        <props>
		.....
	<!-- 配置自动生成表-->  
  	   <prop key="hibernate.hbm2ddl.auto">update</prop>
           <!-- 配置envers-->  
           <!--配置审计表名的后缀,默认为空  -->  
           <prop key="org.hibernate.envers.audit_table_suffix">_revinfo</prop>  
           <!--配置审计表名的前缀,默认为_AUD  -->  
           <prop key="org.hibernate.envers.audit_table_prefix"></prop>  
           <!--配置审计表中记录版本号的字段名称  -->  
           <prop key="org.hibernate.envers.revision_field_name">REV</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">lzzf</prop>  
           <!--配置审计表的catalog,默认为null  -->  
           <prop key="org.hibernate.envers.default_catalog"></prop>  
          ......
        </props>
      </property>
       </bean>

 

3、配置要记录的实体和属性

   @Audited表示要记录的实体

   @NotAudited标记在属性的get方法之上,表示该字段不作变更记录

 

@Audited
@Entity
public class CaseInfo implements java.io.Serializable {
......
 @NotAudited
   
 public String getEventStatus() {
   
     return this.eventStatus;
    
}
}

 

 

 

4、运行系统,可以看到数据库生成了两个表:

case_info_revinfo  :  数据变更版本记录,包括了实体的ID、字段值、版本号(修订编号)、操作类型

revinfo:修订编号、操作时间戳

 

5、当修改该实体类的某字段值时,这两个数据表的变化如下:

 

case_info_revinfo  :  数据变更版本记录,包括了实体的ID、字段值、版本号(修订编号)、操作类型
Hibernate envers在Hibernate4+Spring4中的配置_第1张图片
 

 revinfo:修订编号、操作时间戳

 
Hibernate envers在Hibernate4+Spring4中的配置_第2张图片
 

 

你可能感兴趣的:(Hibernate envers在Hibernate4+Spring4中的配置)