2012-08-29

Hello Hibernate Envers 4.1.6.Final

Envers 不知道在什麼時候加入 Hibernate?文件在 3.3.0.GA 有看到,而 Maven 裡最早的版本則是 3.5.0.Final。

聽說 Envers 之前是 jBoss 的成員,後來 Hibernate 進入 jBoss,Envers 就搬到 Hibernate 裡了。

講一堆,Envers 到底是什麼?簡單一句話,就是歷史版本。

一些系統有時候會要求,將文件的每次修改都存下來,供以後追蹤,就像是 SVN 這樣的功能,而 Envers 就是在 Hibernate 提供這樣的功能(驚嚇中...)。

快速使用 Envers 三步驟:
  1. 在 hibernate.cfg.xml 裡設定一些 listener,用來監測是否要另存歷史版本
  2. 在 entity 裡加上 @Audited,表示要存歷史版本
  3. 產生必要的 table

在 hibernate.cfg.xml 設定 listener
<listener class="org.hibernate.ejb.event.EJB3PostInsertEventListener,org.hibernate.envers.event.AuditEventListener"/>
<listener class="org.hibernate.ejb.event.EJB3PostUpdateEventListener,org.hibernate.envers.event.AuditEventListener"/>
<listener class="org.hibernate.ejb.event.EJB3PostDeleteEventListener,org.hibernate.envers.event.AuditEventListener"/>
<listener class="org.hibernate.envers.event.AuditEventListener"/>
<listener class="org.hibernate.envers.event.AuditEventListener"/>
<listener class="org.hibernate.envers.event.AuditEventListener"/>
在 entity 裡加上 @Audited
@Entity
@Audited
@SuppressWarnings("serial")
public class Document implements Serializable {
 // ...
}
產生必要的 table
public class MySchemaExport {

  public static void main(String[] args) throws IOException {
    System.out.println("creating the schema ...");

    Configuration cfg = new Configuration();
    cfg.configure();

    // 一般的 table schema
    SchemaExport export = new SchemaExport(cfg);
    export.setOutputFile("src/main/database/my.sql");
    export.setDelimiter(";");
    export.setFormat(true);
    export.create(true, false);

    // 要使用 Envers 的 table schema
    AuditConfiguration.getFor(cfg);
    export = new SchemaExport(cfg);
    export.setOutputFile("src/main/database/myAudit.sql");
    export.setDelimiter(";");
    export.setFormat(true);
    export.create(true, false);
    
    System.out.println("done");
  }
}
---

沒有留言:

張貼留言