2017-04-17 87 views
0

我使用Hibernate 4.0 envers如何使用envers 4防止插入審計冬眠

當我做一個更新或插入,數據得到保存與模式0和1

我審覈表想要在後插入時禁用審計。有人可以請,讓我知道如何禁用它。

我已經閱讀了4.0版的hibernate,它會自動註冊審計事件。

我有一種方法可以禁用插入審計?

回答

0

在實體上刪除

@Audited 

註解,如果它們存在於實體類/場names.If你必須將審覈日誌定製表,刪除那些實體

0

hibernate.envers。 autoRegisterListeners - 控制標準Envers偵聽器是否自動註冊。

您可以註冊自定義偵聽器來允許或阻止自定義事件的工作。

這裏是從休眠引導步驟:

  1. 通過thehibernate.listeners.envers.autoRegister休眠屬性設置爲false關閉自動Envers事件偵聽器註冊。
  2. 爲適當的事件偵聽器創建子類。例如,如果要有條件地審計實體插入,請擴展org.hibernate.envers.eventEnversPostInsertEventListenerImpl類。將條件審計邏輯放在子類中,如果要執行審計,則調用超級方法。
  3. 創建自己的org.hibernate.integrator.spi.Interator實現,類似於org.hibernate.envers.event.EnversIntegrator。使用您的事件偵聽器類而不是默認類。
  4. 爲了在Hibernate啓動時自動使用集成器,您需要將META-INF/services/org.hibernate.integrator.spi.Integrator文件添加到jar中。該文件應該包含實現該接口的類的全限定名稱。

for more detail go to link 代碼示例

import org.hibernate.envers.configuration.spi.AuditConfiguration; 
import org.hibernate.envers.event.spi.EnversPostInsertEventListenerImpl; 
import org.hibernate.event.spi.PostInsertEvent; 

public class SprEnversPostInsertEventListenerImpl extends EnversPostInsertEventListenerImpl { 

    private static final long serialVersionUID = 1L; 

    public SprEnversPostInsertEventListenerImpl(AuditConfiguration enversConfiguration) { 
     super(enversConfiguration); 
    } 

    @Override 
    public void onPostInsert(PostInsertEvent event) { 
     super.onPostInsert(event); 
    } 

} 

定製集成商的代碼示例

public class EnverseCustomIntegrator extends EnversIntegrator { 

    public static final String AUTO_REGISTER = "hibernate.listeners.envers.autoRegister"; 
    private AuditConfiguration enversConfiguration; 

    @Override 
    public void integrate(org.hibernate.cfg.Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) { 



     final EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class); 
     listenerRegistry.addDuplicationStrategy(EnversListenerDuplicationStrategy.INSTANCE); 

     enversConfiguration = AuditConfiguration.getFor(configuration, serviceRegistry.getService(ClassLoaderService.class)); 

     if (enversConfiguration.getEntCfg().hasAuditedEntities()) { 
      listenerRegistry.appendListeners(EventType.POST_DELETE, new SprEnversPostDeleteEventListenerImpl(enversConfiguration)); 
      listenerRegistry.appendListeners(EventType.POST_INSERT, new SprEnversPostInsertEventListenerImpl(enversConfiguration)); 
      listenerRegistry.appendListeners(EventType.POST_UPDATE, new SprEnversPostUpdateEventListenerImpl(enversConfiguration)); 
      listenerRegistry.appendListeners(EventType.POST_COLLECTION_RECREATE, new SprEnversPostCollectionRecreateEventListenerImpl(enversConfiguration)); 
      listenerRegistry.appendListeners(EventType.PRE_COLLECTION_REMOVE, new SprEnversPreCollectionRemoveEventListenerImpl(enversConfiguration)); 
      listenerRegistry.appendListeners(EventType.PRE_COLLECTION_UPDATE, new SprEnversPreCollectionUpdateEventListenerImpl(enversConfiguration)); 
     } 

    } 
} 

持久化上下文配置

  <property name="hibernate.integration.envers.enabled" value="true"/> 
     <property name="hibernate.envers.autoRegisterListeners" value="true"/> 

src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator內容示例如下:

mycustom.audit.package.audit.EnverseCustomIntegrator