私はしばらくの間、このクエリで立ち往生しています。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 にフォールバックするのは嫌いです。