基本上,当我想从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项目中的任何人?
答案 0 :(得分:4)
首选覆盖JpaRepositoryFactory.getTargetRepository(RepositoryMetadata, EntityManager)
。从JpaRepositoryFactory.getTargetRepository(RepositoryMetadata)
调用此方法,该方法将使用必要的CrudMethodMetadata
填充您创建的存储库实例。