FilterMany
这会对 OneToMany
或 ManyToMany
关系返回的 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();