在同一个应用程序

时间:2017-01-04 21:41:22

标签: spring-boot hibernate-envers

我希望有一个实体存储库(常规JPA存储库)以及一个跟踪审计信息的独立存储库(一个RevisionRepository,一部分是hibernate envers)。

我似乎无法在我的应用程序中使用它。

据我所知,每种类型的存储库都需要使用它自己的工厂(带有repositoryFactoryBeanClass的JpaRepository和带有RevisionRepository的{​​{1}})进行实例化,并且可以使用EnversRevisionRepositoryFactoryBean注释设置。

问题是只有一个注释可以在我的主类上。我已经看到了一个以xml格式(here)完成此操作的示例,但我不知道如何使用注释执行此操作。

如何做到这一点?

2 个答案:

答案 0 :(得分:0)

EnversRevisionRepositoryFactoryBean扩展了JpaRepositoryFactoryBean,因此您只需在配置中指定EnversRevisionRepositoryFactoryBean即可让两者都适合您。

内部发生的事情是,如果EnversRevisionRepositoryFactoryBean确定您的存储库没有实现正确的接口,它将委托给超级实现,在本例中是JpaRepositoryFactoryBean

答案 1 :(得分:0)

不知何故,您需要为JpaRepositoryFactoryBeanEnversRevisionRepositoryFactoryBean创建两个单独的配置类,如下面的代码所示。

@EnableJpaRepositories(basePackages = "com.example.jpa.dao")
class JpaConfig {}

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean, basePackages = "com.example.envers.dao")
class EnversConfig {}

它对我有用。但无法理解为什么EnversRevisionRepositoryFactoryBean仅适用于RevisionRepository,而JPRepository适用于EnversRevisionRepositoryFactoryBean extends JpaRepositoryFactoryBean

有人请编辑答案并提供解释,这样对其他人也会有所帮助。