试用JBoss Envers项目有一阵子了,趁Envers项目发布 1.1.0版,也同时把学习笔记共享给大家,希望对大家有所帮助。
下面来看一下JBoss Envers项目的目的,官方说明如下:
| The Envers project aims to enable easy versioning of persistent classes. All that you have to do is annotate your persistent class or some of its properties, that you want to version, with @Versioned. For each versioned entity, a table will be created, which will hold the history of changes made to the entity. You can then retrieve and query historical data without much effort. |
JBoss Envers目的是根据对实体的设置,提供记录执行数据变更历史的功能(数据变更版本)。Envers的配置非常简单,如果需要对某个实例进行历史数据版本记录,只需要在实例上配置@Versioned annotation即可。 针对每个实体的版本的历史数据,Envers都会创建一个单独的数据表进行存储。
目前Envers支持Hibernate和Hibernate-entitymanager(JPA实现)
本示例以Hibernate-entitymanager为例,讲解其配置的方法:
先配置 persistence.xml, 加入 property配置
<persistence-unit > <provider>org.hibernate.ejb.HibernatePersistence</provider> <class> </class> <properties> <property name="hibernate.dialect" /> <!-- other hibernate properties --> <property name="hibernate.ejb.event.post-insert" value="org.jboss.envers.event.VersionsEventListener" /> <property name="hibernate.ejb.event.post-update" value="org.jboss.envers.event.VersionsEventListener" /> <property name="hibernate.ejb.event.post-delete" value="org.jboss.envers.event.VersionsEventListener" /> <property name="hibernate.ejb.event.pre-collection-update" value="org.jboss.envers.event.VersionsEventListener" /> <property name="hibernate.ejb.event.pre-collection-remove" value="org.jboss.envers.event.VersionsEventListener" /> <property name="hibernate.ejb.event.post-collection-recreate" value="org.jboss.envers.event.VersionsEventListener" /> </properties> </persistence-unit> |
示例代码:
| 1 import org.jboss.versions.Versioned; 2 3 import javax.persistence.Entity; 4 import javax.persistence.Id; 5 import javax.persistence.GeneratedValue; 6 import javax.persistence.Column; 7 8 @Entity 9 @Versioned 10 public class Blog { 11 @Id 12 @Column(length=32) 13 private String id; 14 15 @Versioned 16 @Column(length=100) 17 private String title; 18 19 @Column(length=2000) 20 private String date; 21 22 @Versioned 23 @ManyToOne 24 private String body; 25 26 @ManyToOne 27 private Author author; 28 // add getters, setters, constructors, equals and hashCode here 29 } 30 31 @Entity 32 @Versioned 33 public class Author { 34 35 @Id 36 @Column(length=32) 37 private String id; 38 39 @Versioned 40 @Column(length=20) 41 private String name; 42 43 } |
共2页 1 2


> 



