基本上就是我要从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
填充您创建的存储库实例。