更新テイク2
これが私が扱っている2つのクエリです(両方のクエリでページングは省略されています)
次のクエリを取得したい
SELECT *
FROM product
LEFT OUTER JOIN
(
SELECT *
FROM Cart
LEFT OUTER JOIN
cartproducts
ON Cart.Id = cartproducts.Cart_id
WHERE Cart.username = 'user'
)
AS CartFiltered
ON product.Id = CartFiltered.product_id
しかし、私はいつも得るようです
SELECT *
FROM product
LEFT OUTER JOIN
cartproducts
ON product.Id = cartproducts.Product_id
LEFT OUTER JOIN
Cart
ON
cartproducts.cart_id = cart.id
WHERE Cart.username = 'user'
どうすれば最初のタイプのクエリを作成できますか?私の質問がより明確になることを願っています:)明確さの欠如は時々私の大きな敵です:p
アップデート:
FWIW、まだ答えが見つかりません。現在、ページングされた商品データとカート全体を読み込んで、正しいオブジェクトを表示しています。粗雑な解決策ですが、それは機能し、CriteriaAPIに私をマスターとして認識させるために私が経験した組み合わせを打ち負かします。誰かが私を正しい方向に向けることができたら、私は非常に興味があります;)
こんにちは、
Criteria APIで次のクエリを作成するのに苦労していますが、その方法がよくわかりません。一部の人が助けてくれることを願っています。
データベースには、製品があります。これらの製品は多くのカート(ユーザーごとに1つのカート)に入れることができ、各カートには多くの製品を含めることができるため、多対多の関係があります。すべての商品のリストとその横にある小さなアイコンを表示して、この特定の商品がすでにカートに入っていることをユーザーに知らせたいと思います。私がしたことは、NHibernateに自分の製品を依頼し、カートの所有者によってフィルタリングされたカートで左外側結合を行うことです。
Dim critPage As ICriteria = Session.CreateCriteria(GetType(Product)) _
.SetFirstResult(pageNumber * itemsPerPage).SetMaxResults(itemsPerPage) _
.CreateCriteria("Carts", "c", SqlCommand.JoinType.LeftOuterJoin) _
.SetProjection(plist) _
.SetResultTransformer(New TypedResultTransformer(Of ProductWithCartInfo)) _
.Add(Expression.Eq("c.User", username))
射影リストは、列の数をProductWithCartInfoクラスにとって興味深いものに減らすためにここにあります。プロパティの予測のみが含まれます。
問題は、このクエリでは、カートフィルタリングが結果セット全体に適用され、ユーザーのカートに存在するすべての商品ではなく、ユーザーのカートにあるすべての商品が表示されることです。
NhibernateのCriteriaAPIを使用して、サブクエリで左外部結合を実行することは可能ですか?参考までに、可能であればCriteriaAPIに保持したいと思います。ありがとう