jpa Hibernate Envers条件审计,运行时忽略自定义EnversIntegrator

gcuhipw9  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(77)

我需要使用Hibernate Envers和Spring配置条件审计。
默认配置可以工作,但我希望只审计删除操作,并将删除的实体保存在审计表中。
我已经遵循了文档中的所有步骤,但是当我尝试使用一个简单的main来创建和删除实体时,我的CustomEnversIntegrator没有被调用,而是调用了org. hibate.envers.event.spi.EnversIntegrator。
下面是我的spring-config.xml:

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="jpaProperties">
        <props>
            <prop key="org.hibernate.envers.default_schema">macap_auditoria</prop>
            <prop key="org.hibernate.envers.audit_table_prefix">aud_</prop>
            <prop key="org.hibernate.envers.audit_table_suffix"></prop>
            <prop key="org.hibernate.envers.store_data_at_delete">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
            <prop key="hibernate.listeners.envers.autoRegister">false</prop>
            <prop key="org.hibernate.envers.cascade_delete_revision">true</prop>
        </props>
    </property>
    ......

字符串
CustomEnversIntegrator.java,只监听删除操作:

public class CustomEnversIntegrator extends EnversIntegrator {

private AuditConfiguration enversConfiguration;

@Override
public void integrate(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.prependListeners(EventType.POST_DELETE, new CustomEnversPostDeleteEventListener(enversConfiguration));
    }
}


}
最后,我添加了文件META-INF/services/org. hib.spi.Integrator,其中包含一行:uy.com.macap.ccd.services.persistence.audit.CustomEnversIntegrator
在我的.m2文件夹中生成的jar包含META-INF/services/org.hibernate.spi.Integrator文件,所以除了用我修改过的EnversIntegrator类重新编译Envers之外,我不知道还能尝试什么。
谢谢.

kgsdhlau

kgsdhlau1#

我认为问题在于META-INF/services下的文件名。根据文档,它应该是

org.hibernate.integrator.spi.Integrator

字符串

  • 不 *
org.hibernate.spi.Integrator


就像在你的岗位上。

相关问题