2014-06-13 2 views
3

더 유연한 질의를 수행하기 위해 spring-data-mongodb와 querydsl-mongodb을 사용하고 있습니다.Spring MongoDB + @DBRef 관련 객체에 의한 QueryDSL 질의

내 응용 프로그램에는 사용자와 주문이 있습니다. 사용자는 여러 개의 주문을 가질 수 있습니다, 그래서 내 모델은 다음과 같습니다 당신이 볼 수 있듯이

public class User { 

    @Id 
    private String id; 
    private String username; 

//getters and setters 
} 

public class Order { 
    @Id 
    private String id; 

    @DBRef 
    private User user; 

    //getters and setters 
} 

는 사용자와 주문 사이가 일대 다 관계가있다. 각 주문은 사용자에게 할당되며 사용자는 @DBRef 공용 사용자 사용자 속성에 저장됩니다.

이제 사용자에게 10,000 개의 주문이 있다고 가정 해 보겠습니다.

특정 사용자에게 속한 모든 주문을받는 쿼리를 만들 수 있습니까?

public interface OrderRepository extends MongoRepository<Order, String>, 
     QueryDslPredicateExecutor<Order> { 

} 

나는이 솔루션을 시도했지만 아무것도 반환 나던 :

QOrder order = new QOrder("order"); 
Pageable pageable = new PageRequest(0, 100); 

return userRepository.findAll(order.user.id.eq(anUserId), pageable); 

내가 의해 주문을 조회 할 수있는 서비스를 구축하려는 때문에 querydsl을 사용할 필요를

나는 OrderRepository이 userid보다 더 많은 prameters. 예를 들어 특정 사용자 이름을 가진 사용자에게 속한 모든 주문을 받고 싶습니다.

+1

방금 ​​관련 요청을 추가했습니다. https://github.com/querydsl/querydsl/pull/804 –

+0

@ TimoWestkämper 다음 요청을 할 수 없습니다. userRepository.findAll (order.user.username.eq (someUsername), 페이지 가능); 참조 된 ID userRepository.findAll (order.user.id.eq (anUserId), pageable)과 잘 작동합니다. – Philippe

+0

@Philippe 나는 같은 문제가있다. 그 해결책을 찾았습니까? –

답변

1

ID로 검색 할 때 QueryDSL을 필요로하지 않습니다. OrderRepository에서, 인터페이스 방법을 만듭니다

public List<Order> findByUser(String userId); 

요청 예 : curl http://localhost:8080/orders/search/findByUser?userId=5a950ea0a0deb42729b570c0 좀 몽고는 사용자와 가입 (특정 도시에서 모든 사용자, 예를 들어, 주문을 조회하는 방법에 붙어 *

및 주소).