聽說 Envers 之前是 jBoss 的成員,後來 Hibernate 進入 jBoss,Envers 就搬到 Hibernate 裡了。
講一堆,Envers 到底是什麼?簡單一句話,就是歷史版本。
一些系統有時候會要求,將文件的每次修改都存下來,供以後追蹤,就像是 SVN 這樣的功能,而 Envers 就是在 Hibernate 提供這樣的功能(驚嚇中...)。
快速使用 Envers 三步驟:
- 在 hibernate.cfg.xml 裡設定一些 listener,用來監測是否要另存歷史版本
- 在 entity 裡加上 @Audited,表示要存歷史版本
- 產生必要的 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"); } }---
沒有留言:
張貼留言