Как я могу выразить это в HQL - PullRequest
3 голосов
/ 21 ноября 2008

Я застрял с этим запросом в течение некоторого времени. 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...