<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 156,  comments - 601,  trackbacks - 0
        試用JBoss Envers項目有一陣子了,趁Envers項目發(fā)布 1.1.0版,也同時把學(xué)習(xí)筆記共享給大家,希望對大家有所幫助。
        下面來看一下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目的是根據(jù)對實體的設(shè)置,提供記錄執(zhí)行數(shù)據(jù)變更歷史的功能(數(shù)據(jù)變更版本)。Envers的配置非常簡單,如果需要對某個實例進(jìn)行歷史數(shù)據(jù)版本記錄,只需要在實例上配置@Versioned annotation即可。 針對每個實體的版本的歷史數(shù)據(jù),Envers都會創(chuàng)建一個單獨的數(shù)據(jù)表進(jìn)行存儲。
    目前Envers支持Hibernate和Hibernate-entitymanager(JPA實現(xiàn))

    本示例以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 }    

    下面是進(jìn)行測試的代碼:
    1 
       // 新增操作
       entityManager.getTransaction().begin();  
    2   
    3  Author matthew = new Author("1""Matthew Xie");  
    4  Blog newBlog = new Blog("1""Matthew's new Blog" "TODO{add content here}", matthew);    
    5    
    6  entityManager.persist(matthew);  
    7  entityManager.persist(newBlog);  
    8    
    9  entityManager.getTransaction().commit();

     1  //對Blog和author進(jìn)行修改操作
     2  entityManager.getTransaction().begin();  
     3    
     4  Author author = entityManager.find(Author.class"1");  
     5  Blog blog = entityManager.find(Blog.class"1");  
     6    
     7  // Changing the address's house number  
     8  author.setName("Matt Xie")
     9  
    10  Author newAuthor = new Author("2""newAuthor");  
    11    
    12  // change blog author to newAuthor 
    13  blog.setAuthor(newAuthor);  
    14    
    15  entityManager.getTransaction().commit();

    1  //下面代碼,演示了如何取得歷史版本數(shù)據(jù)
    2  VersionsReader reader = VersionsReaderFactory.get(entityManager); 
    3  
    4  // get Blog all versions id
    5  List<Number> versions = reader.getRevisions(Blog.class"1"/*blog id*/);
    6  for (Number version : versions) {
    7          Blog blog = reader.find(Blog.class"1", version);  
    8  }




    注: 補(bǔ)充 Hibernate Envers的Property配置說明
    Property name Default value Description
    org.jboss.envers.versionsTablePrefix
    String that will be prepended to the name of a versioned entity to create the name of the entity, that will hold version information.
    org.jboss.envers.versionsTableSuffix _versions String that will be appended to the name of a versioned entity to create the name of the entity, that will hold version information. If you version an entity with a table name Person, in the default setting Envers will generate a Person_versions table to store historical data.
    org.jboss.envers.revisionFieldName _revision Name of a field in the versions entity that will hold the revision number.
    org.jboss.envers.revisionTypeFieldName _revision_type Name of a field in the versions entity that will hold the type of the revision (currently, this can be: add, mod, del).
    org.jboss.envers.revisionOnCollectionChange true Should a revision be generated when a not-owned relation field changes (this can be either a collection in a one-to-many relation, or the field using "mappedBy" attribute in a one-to-one relation).
    org.jboss.envers.warnOnUnsupportedTypes false When true, a warning in the log will be issued when a property is versioned with an unsupported type, instead of an exception. This way, the configuration process isn't interrupted, but the version schema isn't complete (it lacks the unsupported properties, which won't be versioned).
    org.jboss.envers.unversionedOptimisticLockingField false When true, properties to be used for optimistic locking, annotated with @Version, will be automatically unversioned (their history won't be stored; it normally doesn't make sense to store it).

    JBoss Envers官方網(wǎng)址: http://www.jboss.org/envers

    Good Luck!
    Yours Matthew!
    posted on 2008-11-14 12:14 x.matthew 閱讀(1873) 評論(1)  編輯  收藏 所屬分類: 最新開源動態(tài)Spring|Hibernate|Other framework
    主站蜘蛛池模板: 亚洲成年人电影在线观看| 亚洲影院在线观看| 亚洲精华国产精华精华液| 99国产精品永久免费视频| 亚洲电影在线免费观看| 亚洲视频在线免费播放| 亚洲精品成人久久| 免费观看激色视频网站bd| 91亚洲性爱在线视频| 韩国免费一级成人毛片| 中文字幕无码精品亚洲资源网久久| 久九九精品免费视频| 亚洲精品无码aⅴ中文字幕蜜桃| 成人免费午间影院在线观看| 亚洲av最新在线观看网址| 免费一级国产生活片| 丁香花在线观看免费观看图片 | 亚洲精品理论电影在线观看| 免费观看理论片毛片| 色老头综合免费视频| 亚洲乳大丰满中文字幕| 最近2019中文字幕免费大全5| 亚洲乱码日产精品BD在线观看| 暖暖免费高清日本一区二区三区| 无码天堂va亚洲va在线va| 亚洲日产无码中文字幕| 亚洲一级毛片免费看| 无码亚洲成a人在线观看| 久久夜色精品国产亚洲av| 99re在线免费视频| 亚洲美国产亚洲AV| 亚洲精品国产精品乱码在线观看| 久久99国产乱子伦精品免费| 亚洲AV综合永久无码精品天堂| 国产亚洲精品无码拍拍拍色欲 | 老牛精品亚洲成av人片| 久久久久久久综合日本亚洲| 欧亚精品一区三区免费| 岛国岛国免费V片在线观看| 亚洲国产日韩视频观看| 亚洲色自偷自拍另类小说|