gpt4 book ai didi

jpa - 如何使用自定义 "on"条件进行 CriteriaBuilder 联接?

转载 作者:行者123 更新时间:2023-12-02 02:01:18 33 4
gpt4 key购买 nike

我想使用 CriteriaBuilder 在连接 2 个表的位置进行查询。在 MySQL 中,我尝试进行的查询如下所示:

SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
AND item.type_id = 1

我想要获取所有订单,如果他们有类型 #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));

此查询已损坏,因为它在 MySQL 中产生如下结果:

SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
WHERE item.type_id = 1

结果将仅包含类型为 #1 的商品的订单。没有的订单被排除在外。如何使用 CriteriaBuilder 创建像第一个示例中那样的查询?

最佳答案

可以从版本2.1开始JPA 使用 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));

关于jpa - 如何使用自定义 "on"条件进行 CriteriaBuilder 联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15990141/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com