2014-06-13 136 views
3

我使用spring-data-mongodb和querydsl-mongodb來執行更靈活的查詢。Spring MongoDB + QueryDSL查詢@DBRef相關對象

我的應用程序有用戶和訂單。 的用戶可以有多個訂單,所以我的模型看起來是這樣的:

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 public User用戶屬性中。

現在,讓我們說一個用戶有10,000個訂單。

我如何使查詢獲得屬於特定用戶的所有訂單?

我有OrderRepository:

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因爲我想建立一個可以通過查詢訂單服務比userid更多的參數。例如,我想獲取所有屬於具有特定用戶名的用戶的訂單。

+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),可分頁); – Philippe

+0

@Philippe我有同樣的問題。你有沒有找到解決方案? –

回答

1

按ID搜索時不需要QueryDSL。在OrderRepository,創建一個接口方法:

public List<Order> findByUser(String userId); 

請求例如:curl http://localhost:8080/orders/search/findByUser?userId=5a950ea0a0deb42729b570c0

*我卡在如何查詢訂單,例如,從某個城市的所有用戶(有些蒙戈與用戶加入,地址)。