过滤实体的子实体

时间:2017-10-12 16:40:34

标签: java spring-data criteria

我们说我有用户,每个用户都有订单列表:

跳过了Setter,getter,id

@Entity
class Order {
    private int price;
}


@Entity
class User {
    @OneToMany
    @JoinColumn(..)
    private Set<Order> orders;
}

使用java标准API我想创建查询以加载所有具有价格&gt;的订单的用户100并以此价格获取订单。

如果我创建像

这样的查询
criteriaBuilder.greaterThan(root.join("orders").get("price"), 100);

我会使用所有订单获得正确的用户。我可以只获取所需的订单吗?

1 个答案:

答案 0 :(得分:0)

您可以使用分离式查询条件方法:

DetachedCriteria maxQuery = DetachedCriteria.forClass(Order.class);
maxQuery.add(Restrictions.gt("price", 100));

并将maxQuery添加到原始User.class查询中,如下所示:

userQuery.add(Property.forName("orders").eq(maxQuery));

供参考requires extra caution