<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Hibernate 4 審計 > 原文: [https://javabeginnerstutorial.com/hibernate/auditing-with-hibernate-4/](https://javabeginnerstutorial.com/hibernate/auditing-with-hibernate-4/) 在本文中,我將向您簡要介紹使用 Hibernate 進行實體審計,或更具體地說,是使用 Hibernate Envers,因為這是 Hibernate 核心的 3.x 版本的一部分。 順便說一句:Envers 保留用于實體版本控制。 ## 我為什么要關心審計? 如果您從事較大的項目(或將來某個時候),則審計將在您的應用中扮演重要角色,以監視誰更改了敏感數據。 有時僅監視誰進行了更改是不夠的:您想知道已更改的內容以及哪些值也已更改。 為此,您可以創建自己的自定義解決方案或使用 Hibernate Envers,它是 Hibernate 核心的一部分,提供了開箱即用的功能。 僅提及一個場景:您是汽車零售應用的開發人員。 有人出售一輛豪華轎車的正常價格要低 80% 的汽車,卻沒人知道誰改變了價格。 最后,您會感到后悔,因為您沒有監視,因此必須在很短的時間內解決此問題。 如果聽起來很絕望,并且您想袖手旁觀,請繼續閱讀。 ## Hibernate Envers 的易用性 要使 Hibernate Envers 正常工作,您需要將其導入到類路徑中,或者如果使用 Maven,則將其作為依賴項: ```java <dependency> ?? <groupId>org.hibernate</groupId> ?? <artifactId>hibernate-envers</artifactId> ?? <version>4.3.10.Final</version> </dependency> ``` 如果您的類路徑上有 Envers,只需在要審計的實體或屬性上使用 [[受電子郵件保護]](/cdn-cgi/l/email-protection) 注解: ```java @Entity @Table(name = "BOOKS") @Audited public class Book { // ... the body of the entity } ``` 在這種情況下,Hibernate 自動管理實體的版本控制。 它將創建一個包含實體表名稱和后綴`_AUD`的表。 在此示例`BOOKS_AUD`中,它在那里存儲實體的所有字段以及兩個額外的列:`REVTYPE`和`REV`。 `REVTYPE`是修訂版本的類型,它可以采用值`add`,`mod`,`del`分別插入,修改或刪除。 `REV`字段保存所存儲條目的修訂號。 如果僅使用`@Audited`注解對實體的一個或某些字段進行注解,則`*_AUD`表將包含兩個額外的審計字段,即使用`@Audited`注解的字段和實體的 ID。 Hibernate 創建了一個稱為`REVINFO`的額外表,其中在實體發生更改時`REV`編號與時間戳進行映射。 ## 自定義修訂表 您可以根據需要自定義修訂表,以使用所需的信息擴展核心功能。 正如我上面提到的,一種這樣的情況是與實體更改一起記錄與應用會話關聯的當前用戶(在 Web 應用的情況下)。 為此,您需要一個自定義`@Entity`對象,該對象擴展了`org.hibernate.envers.DefaultRevisionEntity`并具有`@RevisionEntity`注解。 對于`@RevisionEntity`,如果要更新表中的數據,則必須添加自定義監聽器類。 在此示例中,它將是用戶名。 該監聽器必須實現`org.hibernate.envers.RevisionListener`接口,如下所示。 ```java @Entity @RevisionEntity(AuditRevisionListener.class) public class AuditEntity extends DefaultRevisionEntity { ?? private String username; ?? // getters and setters } public class AuditRevisionListener implements RevisionListener { ?? @Override ?? public void newRevision(Object revisionEntity) { ?????? final AuditEntity auditEntity = (AuditEntity) revisionEntity; ?????? // normally you would set here the name of the current user ?????? auditEntity.setUsername("GHajba"); ?? } } ``` ## 在生產過程中切換審計表 您應該關心的一件事是在生產(甚至測試)期間切換審計表。 引入新表后,修訂 ID(審計表中`REV`字段的內容)將立即重置并開始從 1 開始計數(如果您未指定其他任何要開始的序列)。 這意味著您必須知道何時切換以找到正確的修訂信息,以找到正確的修訂信息。 ## 總結 如您所見,Hibernate 提供了一種很好的簡便方法來對實體進行版本控制。 但是,我還是只是簡單地探討了各種可能性,但我希望我能給您一個好的起點。 ## 代碼下載 在此處下載 Hibernate [實體版本代碼](https://github.com/JBTAdmin/Hibernate/tree/master/07_entity_versioning)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看