nhibernate - 当 运行 count w/ join 时,生成的 SQL 不正确
nhibernate - Incorrect generated SQL when running count w/ a join
全部,
我正在使用 Nhibernate 3.3,asp.net 2.0.
仅当我 运行 计数查询时,下面的 HQL 才被错误地翻译成 SQL,换句话说,我 运行 2 个查询:
1)第一次查询查询结果
2) 相同的查询,但将 select 列更改为 select count(*)
我的连接似乎不见了,但我需要它们进行过滤!
你认为 'fetch' 关键字搞砸了吗?从技术上讲,我在执行 count() 时不需要在查询中使用 "fetch",但在第一个查询中需要它。
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
找到错误原因:
在查询中使用 'fetch' 关键字会导致此行为。我知道在 count() 中使用 'fetch' 没有意义,但是在动态构建查询时,您尝试尽可能多地重复使用代码(在两个查询中应该相同)以便于维护和一致性。
全部,
我正在使用 Nhibernate 3.3,asp.net 2.0.
仅当我 运行 计数查询时,下面的 HQL 才被错误地翻译成 SQL,换句话说,我 运行 2 个查询:
1)第一次查询查询结果
2) 相同的查询,但将 select 列更改为 select count(*)
我的连接似乎不见了,但我需要它们进行过滤! 你认为 'fetch' 关键字搞砸了吗?从技术上讲,我在执行 count() 时不需要在查询中使用 "fetch",但在第一个查询中需要它。
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
找到错误原因:
在查询中使用 'fetch' 关键字会导致此行为。我知道在 count() 中使用 'fetch' 没有意义,但是在动态构建查询时,您尝试尽可能多地重复使用代码(在两个查询中应该相同)以便于维护和一致性。