从 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基本上就是这种情况。到目前为止我注意到的是:
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
枚举是 public。现在,新的 CrudMethodMetadataPostProcessor
是包保护的,同样的技巧将不起作用。我意识到我可以做到这一点:
super.getTargetRepository(metadata);
在后端会发生这种情况:
repository.setRepositoryMethodMetadata(lockModePostProcessor.getLockMetadataProvider());
但这似乎太具有误导性了。来自 Spring Data JPA 项目的任何人?
首选覆盖 JpaRepositoryFactory.getTargetRepository(RepositoryMetadata, EntityManager)
。此方法从 JpaRepositoryFactory.getTargetRepository(RepositoryMetadata)
调用,它将负责填充您创建的存储库实例,其中包含必要的 CrudMethodMetadata
.
从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
枚举是 public。现在,新的 CrudMethodMetadataPostProcessor
是包保护的,同样的技巧将不起作用。我意识到我可以做到这一点:
super.getTargetRepository(metadata);
在后端会发生这种情况:
repository.setRepositoryMethodMetadata(lockModePostProcessor.getLockMetadataProvider());
但这似乎太具有误导性了。来自 Spring Data JPA 项目的任何人?
首选覆盖 JpaRepositoryFactory.getTargetRepository(RepositoryMetadata, EntityManager)
。此方法从 JpaRepositoryFactory.getTargetRepository(RepositoryMetadata)
调用,它将负责填充您创建的存储库实例,其中包含必要的 CrudMethodMetadata
.