Spring MongoDB + QueryDSL查询由@DBRef相关对象

时间:2014-06-13 09:40:51

标签: spring mongodb spring-data-mongodb querydsl dbref

我使用spring-data-mongodb和querydsl-mongodb来执行更灵活的查询。

我的应用程序有用户和订单。 用户可以拥有多个订单,因此我的模型如下所示:

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个订单。

如何让查询获取属于特定用户的所有订单?

我有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 个答案:

答案 0 :(得分:1)

按ID搜索时无需QueryDSL。在OrderRepository中,创建一个接口方法:

public List<Order> findByUser(String userId);

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

*我一直坚持如何查询某些城市的所有用户的订单(有些mongo加入了用户和地址)。