我使用Hibernate 4.0 envers如何使用envers 4防止插入審計冬眠
當我做一個更新或插入,數據得到保存與模式0和1
我審覈表想要在後插入時禁用審計。有人可以請,讓我知道如何禁用它。
我已經閱讀了4.0版的hibernate,它會自動註冊審計事件。
我有一種方法可以禁用插入審計?
我使用Hibernate 4.0 envers如何使用envers 4防止插入審計冬眠
當我做一個更新或插入,數據得到保存與模式0和1
我審覈表想要在後插入時禁用審計。有人可以請,讓我知道如何禁用它。
我已經閱讀了4.0版的hibernate,它會自動註冊審計事件。
我有一種方法可以禁用插入審計?
在實體上刪除
@Audited
註解,如果它們存在於實體類/場names.If你必須將審覈日誌定製表,刪除那些實體
hibernate.envers。 autoRegisterListeners - 控制標準Envers偵聽器是否自動註冊。
您可以註冊自定義偵聽器來允許或阻止自定義事件的工作。
這裏是從休眠引導步驟:
- 通過thehibernate.listeners.envers.autoRegister休眠屬性設置爲false關閉自動Envers事件偵聽器註冊。
- 爲適當的事件偵聽器創建子類。例如,如果要有條件地審計實體插入,請擴展org.hibernate.envers.eventEnversPostInsertEventListenerImpl類。將條件審計邏輯放在子類中,如果要執行審計,則調用超級方法。
- 創建自己的org.hibernate.integrator.spi.Interator實現,類似於org.hibernate.envers.event.EnversIntegrator。使用您的事件偵聽器類而不是默認類。
- 爲了在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