我希望有一个实体存储库(常规JPA存储库)以及一个跟踪审计信息的独立存储库(一个RevisionRepository,一部分是hibernate envers)。
我似乎无法在我的应用程序中使用它。
据我所知,每种类型的存储库都需要使用它自己的工厂(带有repositoryFactoryBeanClass
的JpaRepository和带有RevisionRepository
的{{1}})进行实例化,并且可以使用EnversRevisionRepositoryFactoryBean
注释设置。
问题是只有一个注释可以在我的主类上。我已经看到了一个以xml格式(here)完成此操作的示例,但我不知道如何使用注释执行此操作。
如何做到这一点?
答案 0 :(得分:0)
EnversRevisionRepositoryFactoryBean
扩展了JpaRepositoryFactoryBean
,因此您只需在配置中指定EnversRevisionRepositoryFactoryBean
即可让两者都适合您。
内部发生的事情是,如果EnversRevisionRepositoryFactoryBean
确定您的存储库没有实现正确的接口,它将委托给超级实现,在本例中是JpaRepositoryFactoryBean
。
答案 1 :(得分:0)
不知何故,您需要为JpaRepositoryFactoryBean
和EnversRevisionRepositoryFactoryBean
创建两个单独的配置类,如下面的代码所示。
@EnableJpaRepositories(basePackages = "com.example.jpa.dao")
class JpaConfig {}
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean, basePackages = "com.example.envers.dao")
class EnversConfig {}
它对我有用。但无法理解为什么EnversRevisionRepositoryFactoryBean
仅适用于RevisionRepository
,而JPRepository
适用于EnversRevisionRepositoryFactoryBean extends JpaRepositoryFactoryBean
。
有人请编辑答案并提供解释,这样对其他人也会有所帮助。