如果使用多个模块,Spring Data如何知道存储库以支持存储库?

时间:2014-03-29 18:41:25

标签: mongodb jpa spring-data-jpa spring-data

在Spring Data项目中,如果我使用多种类型的存储库,即JPA存储库和Mongo存储库,并且如果我正在扩展CrudRepository那么Spring Data如何知道为该存储库选择哪个存储?它可以使用JPA或Mongo。它是基于在每个持久实体上添加的注释 @Document 还是 @Entity

1 个答案:

答案 0 :(得分:5)

存储为Spring Data存储库接口创建的代理的决定仅由您的配置设置决定。假设您有以下配置:

@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }

由于MongoDB和JPA基础架构都检测到包com.acme.foo中的接口,因此会在某些时候爆炸。要解决此问题,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定义的时候我们不会#&# 39;甚至还不知道任何进一步的基础设施(EntityManager之类)。