更新拍摄 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,我还没有找到答案,目前正在加载分页的产品数据和整个购物车以显示正确的对象。粗略的解决方案,但它有效,它击败了我试图让 Criteria API 将我识别为它的主人的组合。如果有人碰巧指出我正确的方向,我会非常感兴趣;)
你好,
我很难在 Criteria API 中编写以下查询,我真的不知道该怎么做:我希望有人能提供帮助。
在数据库上,我有产品。这些产品可以在许多购物车中(每个用户一个购物车),每个购物车可以包含许多产品,所以我们有一个多对多关系。我想显示每个产品的列表,并在其旁边显示一个小图标,以通知用户该特定产品已经在购物车中。我所做的是向 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 中的 Criteria API 对子查询进行左外连接?有关信息,如果可能,我想将其保留在 Criteria API 中。谢谢