2014-06-13 106 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

*我卡在如何查询订单,例如,从某个城市的所有用户(有些蒙戈与用户加入,地址)。