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

时间:2015-04-01 13:46:08

标签: java spring jpa spring-data spring-data-jpa

基本上,当我想从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项目中的任何人?

1 个答案:

答案 0 :(得分:4)

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