Я застрял с этим запросом в течение некоторого времени. 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));
Это явно не правильно - мне нужно получить userId из latestPostInThread, чтобы использовать его в качестве моего подзапроса, но я совершенно озадачен.
Любая помощь будет очень цениться! Мне не хочется возвращаться к SQL за то, что, я уверен, не особенно сложно достичь в nHibernate.