Возникли проблемы при преобразовании запроса в HQL - PullRequest
1 голос
/ 09 ноября 2008

Я довольно новичок в HQL (ну, в общем, в nHibernate), и сейчас я создаю простое приложение, чтобы узнать о нем больше.

Я столкнулся с проблемами, пытаясь выразить следующий SQL как HQL, и был бы очень признателен за любые идеи.

Вот запрос:

select * from parent p
where p.id in (select p.parentid from child c where c.createdby = 2)
and
(select top 1 createdby 
 from child where parentid = p.id order by createdon desc) != 2

Ответы [ 2 ]

0 голосов
/ 10 ноября 2008

Спасибо - это привело меня на правильный путь. Я не мог использовать «Top», но переписывание запроса, как это, похоже, сработало:

select p from Parent p where p.ID in 
  (select c.parent.Id from Child c where c.CreatedBy = "+user.ID+") 
   and "+ user.ID +" = (select max(c.CreatedBy) 
from Child c 
where child.parent.ID = parent.ID

Извините за неприятную конкатенацию строк - следующий шаг - очистить это с помощью параметризованного HQL!

0 голосов
/ 09 ноября 2008

Не могу поручиться за вторую часть, но, возможно, это поможет вам приблизиться к цели. Я заменил парентидные сравнения на ссылку «многие к одному». Любой должен работать в hql.

select p from parent p 
    where p in (select c.ParentReference from child c 
        where c.createdby = :twoparameter)
    and :twoparameter = (select top 1 c.createdby from child 
        where c.ParentReference = p order by p.createdon desc)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...