Bjø*_*ldt 22 jpa criteria-api jpa-2.0
我想使用CriteriaBuilder在我加入2个表的地方进行查询.在MySQL中,我想要的查询看起来像这样:
SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
AND item.type_id = 1
Run Code Online (Sandbox Code Playgroud)
我想获得所有订单,如果他们有#1类型的商品,我想加入这个商品.但是,如果没有找到#1类型的项目,我仍然想要获得订单.我无法弄清楚如何使用CriteriaBuilder进行此操作.我所知道的是:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Order> cq = cb.createQuery(Order.class);
Root<Order> order = cq.from(Order.class);
Join<Order, Item> item = order.join(Order_.itemList, JoinType.LEFT);
Join<Item, Type> type = order.join(Item_.type, JoinType.LEFT);
cq.select(order);
cq.where(cb.equal(type.get(Type_.id), 1));
Run Code Online (Sandbox Code Playgroud)
此查询已中断,因为它在MySQL中产生类似的结果:
SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
WHERE item.type_id = 1
Run Code Online (Sandbox Code Playgroud)
结果将只包含类型为#1的订单.没有订单被排除在外.如何使用CriteriaBuilder创建第一个示例中的查询?
hzi*_*oun 17
使用该on方法可以做到这一点Join<Z, X> on(Predicate... restrictions);.
这是一个例子:
Root<Order> order = cq.from(Order.class);
Join<Order, Item> item = order.join(Order_.itemList, JoinType.LEFT);
item.on(cb.equal(item.get(Item_.type), 1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32912 次 |
| 最近记录: |