3

私はしばらくの間、このクエリで立ち往生しています。SQL は必要な結果を返しますが、クエリを HQL で表現する方法がわかりません。

SQLは次のとおりです。

select      thread.ThreadId,
            thread.Title,
            thread.CreatedOn, 
            thread.ViewCount,
            thread.CreatedBy,
            thread.ForumId 

from Threads thread 
where 
    (thread.ThreadId in(select post.ThreadId from Posts post 
    where (post.CreatedBy=2 )))

AND

(2!=(select TOP 1 post2.CreatedBy from Posts post2 
        where (post2.ThreadId=thread.ThreadId ) ORDER BY post2.CreatedOn DESC))

相関サブクエリを作成するには DetachedCriteria を使用する必要があると思いますが、実際の問題があります。

これが私がこれまでのところです:

DetachedCriteria latestPostInThread = DetachedCriteria.For(typeof (ForumPost), 
                    "post2")
            .Add(Expression.EqProperty("post2.ThreadId", "post.ThreadId"))
            .AddOrder(Order.Desc("CreatedOn"))
            .SetFirstResult(0)
            .SetMaxResults(1);

メインクエリの場合:

ICriteria critMain = CreateCriteria(typeof (ForumPost), "post")
            .Add(Expression.Eq("CreatedBy",user.ID))
            .Add(Subqueries.Ne("CreatedBy", latestPostInThread));

これは明らかに正しくありません。サブクエリとして使用するには、latestPostInThread から userId を取得する必要がありますが、完全に困惑しています。

どんな助けでも大歓迎です!nHibernate で達成するのが特に難しくないと確信している何かのために、SQL にフォールバックするのは嫌いです。

4

0 に答える 0