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

  • LockModeRepositoryPostProcessor已成为CrudMethodMetadataPostProcessor
  • LockMetadataProvider已成为CrudMethodMetadata

  • 现在,我们有一些自定义的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枚举是公共​​的。现在,新的CrudMethodMetadataPostProcessor已受程序包保护,相同的技巧将不起作用。我意识到我可以做到这一点:
     super.getTargetRepository(metadata);
    

    在后端会发生这种情况:
    repository.setRepositoryMethodMetadata(lockModePostProcessor.getLockMetadataProvider());
    

    但这似乎太令人误解了。 Spring Data JPA项目中的任何人?

    最佳答案

    优先覆盖JpaRepositoryFactory.getTargetRepository(RepositoryMetadata, EntityManager)。从JpaRepositoryFactory.getTargetRepository(RepositoryMetadata)调用此方法,它将用必要的CrudMethodMetadata填充您创建的存储库实例。

    10-02 09:13