A decisão de qual armazenar um proxy criado para uma interface de repositório Spring Data só é tomada devido à sua configuração. Suponha que você tenha a seguinte configuração:
@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }
Isso vai explodir em algum momento, pois as interfaces no pacote
com.acme.foo
ambos são detectados pela infraestrutura MongoDB e JPA. Para resolver isso, o suporte a JavaConfig e XML permite definir filtros de inclusão e exclusão para que você possa usar convenções de nomenclatura, anotações adicionais ou similares:@Configuration
@EnableJpaRepositories(basePackages = "com.acme.foo",
includeFilters = @Filter(JpaRepo.class))
@EnableMongoRepositories(base Packages = "com.acme.foo",
includeFilters = @Filter(MongoRepo.class))
class Config { }
Neste caso, as duas anotações
@JpaRepo
e @MongoRepo
(a ser criado por você) seria usado para acionar seletivamente a detecção, anotando as interfaces de repositório relevantes com eles. Uma detecção automática real é meio impossível, pois é difícil dizer qual loja você está direcionando apenas a partir da declaração da interface do repositório e no momento em que as definições de bean são criadas, nem sabemos sobre nenhuma infraestrutura adicional (uma
EntityManager
ou similares) ainda.