希望有人能回答这个问题。
我知道我可以使用hql(下面的伪代码)
执行以下操作var hql = "from objectA l where size(l.ChildCollection) > 0";
var data = Session.CreateQuery(hql)
.List<objectA>();
有没有想知道你是否可以使用QueryOver做类似的事情。不使用子查询。我在ChildCollection上有一个会话过滤器。
不幸的是,
var query = QueryOver.Of<ObjectA>()
.WhereRestrictionOn(x => x.ChildCollection).IsNotEmpty();
可生产,
WHERE
exists(
select
1
from
[ChildCollection]
where
this_.Id=ObjectA_Id
);
Hql产生的位置,
where
(
select
count(childcollection1_.ObjectA_Id)
from
[ChildCollection] childcollection1_
where
objectA0_.Id=childcollection1_.ObjectA_Id
and childcollection1_.DTCreated between @p0 and @p1
)>0
干杯
Tanzy
答案 0 :(得分:0)
var query = QueryOver.Of<ObjectA>().WhereRestrictionOn(x => x.ChildCollection).IsNotEmpty();
两个查询都会生成类似的sql:
SELECT this_.Id
FROM [ObjectA] this_
WHERE exists(select 1 from [ChildObjectB] where this_.Id = [key])
这是你想要达到的目标吗?