0

nhibernateに変換する必要がある次のクエリがあります。

SELECT  o.* 
FROM orders o
INNER JOIN 
(
        -- get the most recent orders based on end_date (this implies the same order can exist in the orders table more than once)
        SELECT o2.order_id, MAX(o2.end_date) AS max_end_date 
        FROM orders o2
        GROUP BY o2.order_id
) most_recent_orders 
                ON o.order_id=most_recent_orders.order_id
                AND o.end_date=most_recent_orders.max_end_date
-- of the most recent orders, get the ones that are complete                
WHERE o.is_complete=1

hqlがサブクエリへの参加をサポートしていないことはわかっています。そのため、これは機能しません。サブクエリが2つの値を選択しているため、「in」ステートメントを使用できません。休止状態のドキュメントからの提案を使用してみました:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html#queryhql-tuple

from Cat as cat
where not ( cat.name, cat.color ) in (
    select cat.name, cat.color from DomesticCat cat
)

しかし、SQL Serverは「in」ステートメントの複数の値を好まないため、これはエラーをスローしました。

どんな助けでもいただければ幸いです!CriteriaまたはHqlを使用したソリューションを受け入れています。

4

1 に答える 1

0

これはサブクエリを使用して同じことを達成しています

var maxDateQuery = DetachedCriteria.For<Order>()
    .Add(Restrictions.PropertyEq("OrderId", "order.OrderId"))
    .SetProjection(Projections.Property("EndDate"));

var results = session.CreateCriteria<Order>("order")
    .Add(Subqueries.Eq("EndDate",maxDateQuery))
    .Add(Restrictions.Eq("IsComplete", true))
    .List<Order>();
于 2012-07-02T07:11:31.167 に答える