[SPRING] Spring 데이터의 클래스에 대해 MongoDb 컬렉션 이름을 구성하는 방법
SPRINGSpring 데이터의 클래스에 대해 MongoDb 컬렉션 이름을 구성하는 방법
내 Java 코드에서 IProductPrice 인터페이스로 표시되는 MongoDB 데이터베이스에 Products라는 컬렉션이 있습니다. 다음 리포지토리 선언은 Spring Date가 콜렉션 db.collection : Intelliprice.iProductPrice를 보게합니다.
db.collection : Intelliprice.Products에서 IProductPrice에 @Collection (..) 주석을 추가하는 대신 외부 구성을 사용하도록 구성하려고합니다. 이것이 가능한가? 어떻게해야합니까?
public interface ProductsRepository extends
MongoRepository<IProductPrice, String> {
}
해결법
-
==============================
1.현재이 작업을 수행 할 수있는 유일한 방법은 도메인 클래스에 @Document를 사용하여이 클래스의 컬렉션 인스턴스 이름을 정의하는 collection 속성을 사용하여 주석을 저장하는 것입니다.
현재이 작업을 수행 할 수있는 유일한 방법은 도메인 클래스에 @Document를 사용하여이 클래스의 컬렉션 인스턴스 이름을 정의하는 collection 속성을 사용하여 주석을 저장하는 것입니다.
그러나 클래스, 콜렉션 및 프로퍼티 이름을보다 글로벌하게 처리하는 방법을 구성하는 플러그 가능한 이름 지정 전략을 추가하는 것이 좋습니다. 유스 케이스에 대해 의견을 말하고 투표를하십시오.
-
==============================
2.위의 Oliver Gierke의 대답을 사용하여, 하나의 엔티티에 대해 여러 개의 콜렉션을 작성해야하는 프로젝트에서 작업 할 때 스프링 저장소를 사용하고 저장소를 사용하기 전에 사용할 엔티티를 지정해야했습니다.
위의 Oliver Gierke의 대답을 사용하여, 하나의 엔티티에 대해 여러 개의 콜렉션을 작성해야하는 프로젝트에서 작업 할 때 스프링 저장소를 사용하고 저장소를 사용하기 전에 사용할 엔티티를 지정해야했습니다.
SPeL을 사용하여이 시스템을 사용하여 필요에 따라 저장소 수집 이름을 수정할 수있었습니다. 한 번에 하나의 컬렉션에서만 작업 할 수 있습니다.
도메인 객체
@Document(collection = "#{personRepository.getCollectionName()}") public class Person{}
기본 스프링 저장소 :
public interface PersonRepository extends MongoRepository<Person, String>, PersonRepositoryCustom{ }
사용자 정의 저장소 인터페이스 :
public interface PersonRepositoryCustom { String getCollectionName(); void setCollectionName(String collectionName); }
이행:
public class PersonRepositoryImpl implements PersonRepositoryCustom { private static String collectionName = "Person"; @Override public String getCollectionName() { return collectionName; } @Override public void setCollectionName(String collectionName) { this.collectionName = collectionName; } }
그것을 사용하려면 :
@Autowired PersonRepository personRepository; public void testRetrievePeopleFrom2SeparateCollectionsWithSpringRepo(){ List<Person> people = new ArrayList<>(); personRepository.setCollectionName("collectionA"); people.addAll(personRepository.findAll()); personDocumentRepository.setCollectionName("collectionB"); people.addAll(personRepository.findAll()); Assert.assertEquals(4, people.size()); }
그렇지 않으면 구성 변수를 사용해야하는 경우이 같은 것을 사용할 수 있습니까? 출처
@Value("#{systemProperties['pop3.port'] ?: 25}")
from https://stackoverflow.com/questions/12274019/how-to-configure-mongodb-collection-name-for-a-class-in-spring-data by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 레스트 검사기 (0) | 2019.02.03 |
---|---|
[SPRING] Spring의 JdbcTemplate과 트랜잭션 (0) | 2019.02.03 |
[SPRING] Spring MVC requestmapping 핸들러 메소드에서 {id :. +}의 의미는 무엇입니까? (0) | 2019.02.03 |
[SPRING] 런타임 생성자 인자를 가진 스프링 빈 (0) | 2019.02.03 |
[SPRING] Spring / Hibernate / JUnit - Thread에 바인드 된 Hibernate Session 없음 (0) | 2019.02.02 |