FilterMany

这会对 OneToManyManyToMany 关系返回的 Bean 应用筛选器。

例如,Customer 有 OneToMany 订单。我们不想获取要获取的客户的所有订单,而是只想获取他们自上周以来下的新订单。

我们使用 filterMany() 对每个客户获取的订单应用筛选器。

使用简单字符串表达式的 filterMany
// query customers fetching 'new orders since last week' ...
List<Customer> customers
  = new QCustomer()
  .name.istartsWith("Rob")
  .orders.filterMany("status = ? and orderDate > ?", Order.Status.COMPLETE, lastWeek)
  .findList();

在上述示例中,使用字符串表达式,其中 ? 作为绑定参数占位符。这是一种添加简单表达式的相对简单的方法。

下面是相同的查询,其中我们不使用字符串表达式,而是创建 ExpressionList 用于 filterMany

使用 ExpressionList 表达式的 filterMany
// filter orders - status COMPLETE since last week
ExpressionList<Order> filterOrders = new QOrder()
  .status.eq(Order.Status.COMPLETE)
  .orderDate.greaterThan(lastWeek)
  .getExpressionList();


// query customers fetching 'new orders since last week' ...
List<Customer> customers
  = new QCustomer()
  .name.istartsWith("Rob")                   // (1) filter customers
  .orders.filterMany(filterOrders)           // (2) filter the orders for those customers
  .findList();
示例

查找客户及其联系人。筛选联系人,仅查找名字以“Rob”开头的联系人。

List<Customer> customers =
    new QCustomer()
    .status.eq(Status.NEW)
    .contacts.filterMany("firstName istartsWith ?", "Rob")
    .findList();