【问题标题】:Use both envers RevisionRepository and JpaRepository in the same application在同一个应用程序中同时使用 envers RevisionRepository 和 JpaRepository
【发布时间】:2017-01-04 21:41:21
【问题描述】:

我想要一个实体存储库(常规 JPA 存储库)以及一个单独的存储库来跟踪审计信息(RevisionRepository,休眠环境的一部分)。

我似乎无法让它在我的应用程序中工作。

据我所知,每种类型的存储库都需要使用自己的工厂进行实例化(JpaRepository 使用repositoryFactoryBeanClassRevisionRepository 使用EnversRevisionRepositoryFactoryBean),可以使用@EnableJpaRepositories 注释进行设置.

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

如何做到这一点?

【问题讨论】:

    标签: spring-boot hibernate-envers


    【解决方案1】:

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

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

    【讨论】:

    • 这是我尝试时得到的错误: 原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到 [...repositories.MyRevisionRepository] ​​类型的合格 bean [. ..repositories.MyRevisionRepository]:预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注释:{}
    • 你能把你的界面发给MyRevisionRepository吗?
    【解决方案2】:

    您需要为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

    请一些人编辑答案并提供解释,以便对其他人也有帮助。

    【讨论】:

      猜你喜欢
      • 2010-12-10
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      相关资源
      最近更新 更多