如何防止使用Envers 4 Hibernate进行插入审计
我正在使用带有envers的Hibernate 4.0
I am using Hibernate 4.0 with envers
当我进行更新或插入时,数据将以0和1模式保存到审计表中
When I do an update or insert, data is getting saved into audit table with mode a 0 and 1
我想在插入后禁用审核.有人可以,请让我知道如何禁用它.
I would like to disable audit on post-insert. can someone please, let me know how to disable it.
我已经阅读过从4.0版休眠的信息,它会自动注册事件以进行审核.
I have read that hibernate from version 4.0, it automatically registers the events for auditing.
我有一种方法可以在插入时禁用审核吗?
I there a way we can disable audit on insert?
hibernate.envers.autoRegisterListeners-控制是否自动注册标准Envers侦听器.
hibernate.envers.autoRegisterListeners - controls whether the standard Envers listeners are auto-registered.
您可以注册自定义侦听器,以允许或阻止自定义事件起作用.
You can register custom listeners to allow or prevent custom event to work.
这是休眠指南中的步骤:
Here is steps from hibernate guide:
- 通过将hibernate.listeners.envers.autoRegisterHibernate属性设置为false来关闭自动Envers事件侦听器注册.
- 为适当的事件侦听器创建子类.例如,如果您要有条件地审核实体插入,请扩展org.hibernate.envers.eventEnversPostInsertEventListenerImpl类.将条件审核逻辑放在子类中,如果应执行审核,则调用super方法.
- 创建自己的org.hibernate.integrator.spi.Integrator实现,类似于org.hibernate.envers.event.EnversIntegrator.使用事件侦听器类而不是默认的类.
- 要使Hibernate启动时自动使用积分器,您需要将aMETA-INF/services/org.hibernate.integrator.spi.Integrator文件添加到jar中.该文件应包含实现该接口的类的标准名称.
有关更多详细信息,请转到链接代码示例
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);
}
}
自定义集成商的代码示例
custom integrator's Code sample
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内容示例为:
src/main/resources/META-INF/services/org.hibernate.integrator.spi.Integrator content sample is:
mycustom.audit.package.audit.EnverseCustomIntegrator