我是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
答案 0 :(得分:0)
不能保证第二部分,但也许这可以让你更接近目标。我将parentid比较替换为多对一参考。任何应该在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)
答案 1 :(得分:0)
谢谢 - 这让我走上正轨。我无法使用“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清理它!