일부 간단한 도메인 클래스를로드하고 저장하기 위해 Spring Data MongoDB를 사용하고 있습니다. 간단한 예는 말할 수로서 나는MongoDB 자체 저장소 인터페이스가있는 중첩 된 객체
@Document
public class Factory {
@Id String id;
String name;
List<Product> products;
}
@Document
public class Product {
@Id String id;
String name;
Date productionDate;
}
가 좋아, 아주 간단 지금 만들 수 있습니다 공장 및 제품을 가지고 FactoryRepository
:
public interface FactoryQueryRepository extends MongoRepository<Factory, String> {}
이 저장소는 이미 함께 기본적인 저장하는 CRUD 기능과로드의 공장을 가지고 중첩 된 제품. 이제 주어진 팩토리에 대해 일련의 제품 만 검색하려고한다고 가정 해 보겠습니다.
A) 어떻게 든 반환 할 수 제품 대신 지금처럼 FactoryQueryRepository 공장의 목록의 목록 :
@Query(value = "???")
public List<Product> findProductByFactoryName(String name);
나는 이제 두 개의 질문이 B) 내 공장에는 제품뿐만 아니라 직원, 고객, 공급 업체 등이 있습니다. 다음과 같이 몇 가지 특수한 쿼리 방법을 정의해야합니다. 각각의 중첩 된 컬렉션은 곧 매우 큰 FactoryQueryRepository
인터페이스로 끝납니다. 따라서 실제로 Product, Employee, Customer 등에 대해 새로운 ...QueryRepositoy
을 만드는 것이 더 적절할 것입니다. 하지만이 작업을 시도 할 때 공장 내에서 중첩되지 않은 독립 실행 형 Product 객체를 먼저 저장하면 작동하는 것 같습니다.
public interface ProductQueryRepository extends MongoRepository<Product, String> {
@Query(/* select products from factory where name = '?0' */)
public List<Product> findProductsByFactoryName(String name);
}
: 나는 ProductQueryRepository
인터페이스를 정의 (비슷한 질문하기)와 공장의 일부 필터 기준이 뭔가를 지정하여 공장 안에 중첩 된 모든 제품을 검색하는 데 사용할 수있는 방법이 있나요 이 경우 Shoud I는 오히려 중첩 된 객체를 사용하는 것보다 @DBRef
을 사용합니까?