从 Spring Data JPA 1.4 升级到 1.8 后如何解决自定义 JpaRepositoryFactory 中的编译错误?

How to solve compile errors in custom JpaRepositoryFactory after upgrade from Spring Data JPA 1.4 to 1.8?

从1.4.5.RELEASE升级到1.8.0.RELEASE基本上就是这种情况。到目前为止我注意到的是:

现在,我们有一些自定义的 jpa 存储库工厂,为此我们扩展 JpaRepositoryFactory 如下:

class CustomJpaRepositoryFactory extends JpaRepositoryFactory {

  protected <T, ID extends Serializable> JpaRepository<?, ?> getTargetRepository{

    SimpleJpaRepository<?, ?> repo; 
    // some custom code

    LockModeRepositoryPostProcessor lockModePostProcessor = LockModeRepositoryPostProcessor.INSTANCE;
    repo.setLockMetadataProvider(lockModePostProcessor.getLockMetadataProvider());

  }
}

这是可能的,因为 LockModeRepositoryPostProcessor 枚举是 public。现在,新的 CrudMethodMetadataPostProcessor 是包保护的,同样的技巧将不起作用。我意识到我可以做到这一点:

 super.getTargetRepository(metadata);

在后端会发生这种情况:

repository.setRepositoryMethodMetadata(lockModePostProcessor.getLockMetadataProvider());

但这似乎太具有误导性了。来自 Spring Data JPA 项目的任何人?

首选覆盖 JpaRepositoryFactory.getTargetRepository(RepositoryMetadata, EntityManager)。此方法从 JpaRepositoryFactory.getTargetRepository(RepositoryMetadata) 调用,它将负责填充您创建的存储库实例,其中包含必要的 CrudMethodMetadata.