2014-03-29 2 views
1

여러 유형의 저장소 (예 : JPA 저장소 및 Mongo 저장소)를 사용하는 경우 스프링 데이터 프로젝트에서 CRUD 저장소와 연결하는 경우 Spring 데이터가 선택할 저장소를 어떻게 알 수 있습니까? JPA 또는 Mongo를 사용할 수 있습니다. 주석을 기반으로합니까? @Document 또는 @Entity이 모든 지속성 엔터티에 추가 되었습니까?스프링 데이터 저장소

답변

4

Spring 데이터 저장소 인터페이스 용으로 생성 된 프록시를 저장하는 결정은 구성 설정으로 인해 결정됩니다.

@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 정의가 생성 된 시점에 실제 자동 검색이 불가능합니다 추가 인프라 (EntityManager 또는 이와 유사한 것)가 아직 없습니다.

+0

그렇다면 응용 프로그램 구성 XML에서 포함 필터를 사용하여 특정 저장소에 클래스를 언급해야한다는 의미입니까? 답을 가정 할 때 가설적인 질문입니다. JPA 저장소뿐만 아니라 mongo에 동일한 엔티티를 저장하는 경우 다른 저장소를 작성해야합니까? (이것은 크로스 - 스토어 지원을위한 좋은 후보자가 될지도 모른다. 그러나 그것은 내가 추측하는 Mongo에만 국한된다) – Milind

관련 문제