Java 如何在spring启动应用程序中访问AuditReaderFactory?

Java 如何在spring启动应用程序中访问AuditReaderFactory?,java,spring-boot,spring-data-jpa,nhibernate-envers,Java,Spring Boot,Spring Data Jpa,Nhibernate Envers,我使用的是SpringBoot和SpringDataJPA。我还使用hibernate envers,我需要访问AuditReaderFactory,以便编写审计查询 因为它是spring引导和spring数据jpa,所以一切都是自动配置的。所以当我这么做的时候 @Autowired AuditReaderFactory auditReaderFactory; 它不起作用。我得到以下错误 org.springframework.beans.factory.NoSuchBeanDefinitio

我使用的是SpringBoot和SpringDataJPA。我还使用hibernate envers,我需要访问AuditReaderFactory,以便编写审计查询

因为它是spring引导和spring数据jpa,所以一切都是自动配置的。所以当我这么做的时候

@Autowired
AuditReaderFactory auditReaderFactory;
它不起作用。我得到以下错误

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.envers.AuditReaderFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency

如何在我的存储库类中获得对AuditReaderFactory的正确引用?

AuditReaderFactory只有两个静态方法。能否自动关联SessionFactory对象或EntityManager?看起来这两者都能满足您的需求,即访问AuditReader

AuditReaderFactory.get(sessionFactory.getCurrentSession())

编辑贴子有一些细节或连线SessionFactory,如果需要

跟进上述答案和链接问题,我发现这是可行的。(如果可以直接将其转换为读卡器的自动连线,那就太好了)


创建配置类,如AuditConfiguration.java:

import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManagerFactory;

@Configuration
public class AuditConfiguration {

    private final EntityManagerFactory entityManagerFactory;

    AuditConfiguration(EntityManagerFactory entityManagerFactory) {
        this.entityManagerFactory = entityManagerFactory;
    }

    @Bean
    AuditReader auditReader() {
        return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
    }
}

之后,您可以在组件类中自动连线
AuditReader

在链接到autowire SessionFactory之后,这不起作用;可以创建和保存实体,但仍然无法获取AuditReaderFactory:(spring 1.5,hibernate 5.2.1)org.hibernate.HibernateException:未配置CurrentSessionContext!
import org.hibernate.envers.AuditReader;
import org.hibernate.envers.AuditReaderFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.persistence.EntityManagerFactory;

@Configuration
public class AuditConfiguration {

    private final EntityManagerFactory entityManagerFactory;

    AuditConfiguration(EntityManagerFactory entityManagerFactory) {
        this.entityManagerFactory = entityManagerFactory;
    }

    @Bean
    AuditReader auditReader() {
        return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
    }
}