1
在Spring数据项目中,如果我使用多种类型的存储库,即JPA存储库和Mongo存储库,并且如果我绑定到CRUD存储库,那么Spring数据如何知道要选择哪个存储库?它可以使用JPA或Mongo。是否基于每个持久实体上的注释@Document或@Entity?Spring数据存储库
在Spring数据项目中,如果我使用多种类型的存储库,即JPA存储库和Mongo存储库,并且如果我绑定到CRUD存储库,那么Spring数据如何知道要选择哪个存储库?它可以使用JPA或Mongo。是否基于每个持久实体上的注释@Document或@Entity?Spring数据存储库
存储为Spring数据存储库接口创建的代理的决定仅由于您的配置设置而产生。假设你有以下配置:
@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }
这会在某些时候要炸毁在包com.acme.foo
的接口由MongoDB的和JPA基础设施都进行检测。为了解决这个问题,无论是JavaConfig和XML支持允许您定义包括和排除过滤器,这样你既可以使用命名约定,附加注释或类似:
@Configuration
@EnableJpaRepositories(basePackages = "com.acme.foo",
includeFilters = @Filter(JpaRepo.class))
@EnableMongoRepositories(base Packages = "com.acme.foo",
includeFilters = @Filter(MongoRepo.class))
class Config { }
在这种情况下,两个注解@JpaRepo
和@MongoRepo
(由你创建)将被用于通过注释与它们相关的存储库接口来选择性地触发检测。
真正的自动检测是不可能的,因为很难从存储库接口声明中知道您要将哪个存储区作为目标,并且在创建bean定义的时间点,我们甚至不知道任何存储区进一步的基础设施(EntityManager
等)。
这是否意味着我需要在应用程序config xml中提到使用包含过滤器的特定存储库的类?假设答案为假的问题是 - 如果同一实体用于在mongo和JPA存储库中存储,那么是否需要编写不同的存储库? (这对于跨店支持来说可能是个不错的选择,但这仅限于Mongo,我猜) – Milind