<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項目發布 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 }    

    下面是進行測試的代碼:
    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進行修改操作
     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  //下面代碼,演示了如何取得歷史版本數據
    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  }




    注: 補充 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官方網址: http://www.jboss.org/envers

    Good Luck!
    Yours Matthew!
    posted on 2008-11-14 12:14 x.matthew 閱讀(1881) 評論(1)  編輯  收藏 所屬分類: 最新開源動態Spring|Hibernate|Other framework
    主站蜘蛛池模板: 亚洲日韩在线观看| 日韩a级毛片免费视频| 国产a v无码专区亚洲av| 国产成人亚洲精品电影| 国产男女猛烈无遮挡免费视频网站| 亚洲伊人久久大香线蕉结合| 国产92成人精品视频免费| 亚洲欧洲第一a在线观看| 亚欧日韩毛片在线看免费网站| 亚洲成人激情在线| 青青草无码免费一二三区| 久久久亚洲欧洲日产国码aⅴ | 免费少妇a级毛片| WWW亚洲色大成网络.COM| 免费一级毛片女人图片| 又黄又大的激情视频在线观看免费视频社区在线| 国产精品免费视频播放器| 丁香六月婷婷精品免费观看| 久久99亚洲综合精品首页| 国产好大好硬好爽免费不卡| 亚洲成av人片在线看片| 成人看的午夜免费毛片| 美女又黄又免费的视频| 亚洲自偷自偷图片| 18禁男女爽爽爽午夜网站免费| 亚洲一区精品视频在线| 精品国产免费一区二区| 午夜在线免费视频| 亚洲成熟xxxxx电影| 成年女人毛片免费播放视频m| 黄色免费网站在线看| 亚洲AV美女一区二区三区| 青青草免费在线视频| 色多多免费视频观看区一区| 亚洲日韩精品一区二区三区无码| 98精品全国免费观看视频| 7777久久亚洲中文字幕| 亚洲熟女乱综合一区二区| 久久午夜伦鲁片免费无码| 亚洲国产aⅴ成人精品无吗| 亚洲成av人在线视|