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

时间:2016-03-28 08:29:25

标签: java spring-boot spring-data-jpa nhibernate-envers

我正在使用spring boot和spring数据jpa。我也在使用hibernate envers,我需要访问AuditReaderFactory,以便我可以编写Audit Queries。

因为它是弹簧启动和弹簧数据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的正确引用?

3 个答案:

答案 0 :(得分:2)

根据上述答案和相关问题,我发现这是有效的。 (如果可以直接以某种方式将其变成读者的自动装置,那将会很好)

@Autowired
private EntityManagerFactory factory;

public void stuff() {
    AuditReader audit = AuditReaderFactory.get(factory.createEntityManager());
}

答案 1 :(得分:1)

AuditReaderFactory只有两个静态方法。你可以自动装配SessionFactory对象或你的EntityMananger吗?看起来要么会给你你想要的,也就是访问AuditReader。

AuditReaderFactory.get(sessionFactory.getCurrentSession())

编辑 this帖子有一些细节或连接SessionFactory(如果需要)

答案 2 :(得分:0)

创建配置类,例如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