【问题标题】:Mixing Spring Data Envers and QueryDSL混合 Spring Data Envers 和 QueryDSL
【发布时间】:2017-11-10 23:29:53
【问题描述】:

我在我的项目中使用了一个全局自定义存储库,它扩展了 QueryDslJpaRepository:

   public class CustomPagingAndSortingRepositoryImpl<T, ID extends Serializable> extends QueryDslJpaRepository<T, ID>
    implements CustomPagingAndSortingRepository<T, ID> {

还有界面:

   public interface CustomPagingAndSortingRepository<T, ID extends Serializable>
    extends JpaRepository<T, ID>, QueryDslPredicateExecutor<T> {

然后在我的配置上我用以下注释:

@EnableJpaRepositories(repositoryBaseClass = CustomPagingAndSortingRepositoryImpl.class)

一切正常,但现在我试图通过使用 spring-data-envers 为我的实体添加审计支持,根据文档我应该使用特定的存储库工厂 bean 类:

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class, repositoryBaseClass = CustomPagingAndSortingRepositoryImpl.class)

现在很明显,如果我这样做了,这些事情将无法正常工作,因为我的存储库现在将通过 EnversRevisionRepositoryFactoryBean 类创建,并且不再属于 CustomPagingAndSortingRepositoryImpl 类型。

我怎样才能支持这样的事情?由于我的自定义存储库需要从 QueryDslJpaRepository 扩展,所以我没有看到如何。

【问题讨论】:

标签: spring-data querydsl spring-data-envers


【解决方案1】:

我认为与您相关的部分是EnversRevisionRepositoryFactoryBean的这种方法:

@Override
protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) {
    return EnversRevisionRepositoryImpl.class;
}

在这里,您真的希望您的CustomPagingAndSortingRepositoryImpl 返回。所以我会尝试以下方法:

  1. 扩展 EnversRevisionRepositoryFactoryBean 并覆盖 getRepositoryBaseClass 以返回您的 CustomPagingAndSortingRepositoryImpl

  2. 使CustomPagingAndSortingRepositoryImpl 扩展EnversRevisionRepositoryImpl

【讨论】:

  • 恐怕这行不通,因为 CustomPagingAndSortingRepositoryImpl 已经在扩展 QueryDslJpaRepository 所以它不能扩展 EnversRevisionRepositoryImpl
  • 实现两个类实现的所有接口就足够了。所以从一个+缺少的接口扩展并从另一个实现复制代码(或委托给它的一个实例)。
  • 我试图避免从其他实现中复制粘贴代码,因为我认为这不是一个好的解决方案(每次我将库更新到新版本时都需要查看它)。我想委派给一个新实例会起作用,这就是我正在尝试的,但是在为 EnversRevisionRepositoryImpl 构造函数设置 RevisionEntityInformation 时遇到了麻烦,我不明白在 EnversRevisionRepositoryFactoryBean 中如何/何时设置 revisionEntityClass。
猜你喜欢
  • 2012-11-09
  • 2020-06-16
  • 2016-02-17
  • 2020-01-18
  • 2016-10-21
  • 2023-03-25
  • 1970-01-01
  • 2016-01-08
  • 2021-07-17
相关资源
最近更新 更多