Spring MongoDB + QueryDSL通过@DBRef关联对象查询

5

我正在使用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,因为我想构建一个可以按照多个参数查询订单的服务。例如,我想获取属于特定用户名用户的所有订单。


2
我刚刚添加了一个相关的拉取请求:https://github.com/querydsl/querydsl/pull/804 - Timo Westkämper
1
@TimoWestkämper 我无法让以下请求工作userRepository.findAll(order.user.username.eq(someUsername), pageable);使用引用的id它可以正常工作userRepository.findAll(order.user.id.eq(anUserId), pageable); - Philippe
1
@Philippe 我也遇到了同样的问题。你找到解决方案了吗? - Nishant Bhardwaz
1个回答

1
当按ID搜索时,不需要使用QueryDSL。在OrderRepository中,创建一个接口方法:
public List<Order> findByUser(String userId);

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

* 我不知道如何查询订单,例如,来自某个城市的所有用户的订单(一些与用户和地址相关的Mongo连接)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接