所有
我正在使用Nhibernate 3.3,asp.net 2.0。
当我运行计数查询时,下面的HQL被错误地转换为SQL,换句话说,我运行了2个查询:
1)查询结果的第一个查询
2)相同的查询但更改选择列,以选择count(*)
看来我的联接已经消失,但我需要它们进行过滤! 你认为这个' fetch'关键字搞砸了吗?我在技术上并不需要"获取"在查询时我正在执行count()但需要第一次查询。
运行之前的HQL:
select count(legal.id) from OtherRPlan_ p
inner join fetch p.IssuedBy
left join fetch p.Region
left join fetch p.LegalDescList legal
where p.Status = true and p.Region.Id = :region
从HQL生成SQL:
select count(legaldescl3_.entity_id) as col_0_0_
from Other_Rplans otherrplan0_
where otherrplan0_.status=1 and otherrplan0_.region_id=@p0
答案 0 :(得分:0)
找到错误原因:
在查询中使用'fetch'关键字会导致此行为。我知道在count()中使用'fetch'是没有意义的,但是在动态构建查询时,您尝试尽可能多地重用代码(在两个查询中应该是相同的)以便于维护和一致性。