CriteriaBuilderを使用して2つのテーブルを結合するクエリを作成します。 MySQLでは、私が作るしようとしているクエリは次のようになります。カスタム "オン"条件でCriteriaBuilderを結合する方法は?
SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
AND item.type_id = 1
私はすべての注文を取得したいと、彼らはタイプ#1のアイテムを持っている場合、私はこの項目に参加したいです。しかし、タイプ#1のアイテムが見つからない場合は、依然として注文を取得したいと考えています。私はCriteriaBuilderでこれを作る方法を理解できません。
SELECT * FROM order
LEFT JOIN item
ON order.id = item.order_id
WHERE item.type_id = 1
結果は唯一のタイプの#1のアイテムとの注文が含まれます:私が作る方法を知っているすべてがある:それは、MySQLでこのようなものになり以来
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));
このクエリは、破産です。なしの注文は除外されます。最初の例のようにCriteriaBuilderを使用してクエリを作成するにはどうすればよいですか?
_すべての注文を受け取り、#1のタイプのアイテムがある場合は、このアイテムをresult_に含める必要があります。どのような結果タイプが必要ですか?注文?またはタプル/マルチセレクション?あなたはすべての注文よりも何を望んでいますか?説明してください – perissf
申し訳ありませんが、私は非常に明確ではなかった。私は説明を修正しました。私は実際に私の結果の一部としてアイテムを取得することに興味がありません。私はただ私の結果で注文したい。基本的には、特定のタイプのアイテムに基づいて結果を並べ替えると同時に、そのタイプのアイテムがなくても注文を受けたいのです。 –
CriteriaBuilderで可能です!私の答えはぼんやりしています – Mitchapp