聽說 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 {
// ...
}
產生必要的 tablepublic 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");
}
}
---
沒有留言:
張貼留言