NHibernate:双嵌套子查询和;找不到匹配的条件信息提供程序…“;
我在解决如何将以下sql导入NHibernate iLiteria时遇到问题:NHibernate:双嵌套子查询和;找不到匹配的条件信息提供程序…“;,nhibernate,Nhibernate,我在解决如何将以下sql导入NHibernate iLiteria时遇到问题: select * from Contract contract_outer where exists ( select 1 from RequiredDocRules where not exists ( select 1 from Contract contract_inner inner join ContractDocs contractDocs on cDocs
select * from Contract contract_outer
where exists (
select 1 from RequiredDocRules
where not exists (
select 1 from Contract contract_inner
inner join ContractDocs contractDocs on cDocs.ContractId = c_inner.Id
inner join Doc doc doc.Id = contractDocs.DocId
where contract_inner.Id = contract_outer.Id
and doc.Type = RequiredDocRules.DocType)
)
and RequiredDocRules.ContractType = contract_outer.Type
)
基本上,查询的意思是“根据此类合同的规则,显示缺少所需文档的合同”
CreateCriteria如下所示:
var subqueryB = DetachedCriteria.For<Contract>("contract_inner")
.CreateAlias("contract_inner.Docs", "doc")
.Add(Restrictions.EqProperty("doc.Type", "rule.DocType"))
.Add(Restrictions.EqProperty("contract_inner.Id", "contract_outer.Id")
.SetProjection(Projections.Id());
var subqueryA = DetachedCriteria.For<RequiredDocRule>("rule")
.Add(Restriction.EqProperty("rule.ContractType", "contract_outer.Type"))
.Add(Subqueries.NotExists(subqueryB))
.SetProjection(Projections.Id());
return Session.CreateCriteria<Contract>("contract_outer")
.Add(Subqueries.Exists(subqueryA))
.List<Contract>();
var subqueryB=DetachedCriteria.For(“合同内部”)
.CreateAlias(“合同\内部文件”,“文件”)
.Add(Restrictions.EqProperty(“doc.Type”、“rule.DocType”))
.Add(限制.EqProperty(“contract\u inner.Id”、“contract\u outer.Id”)
.SetProjection(projects.Id());
var subqueryA=DetachedCriteria.For(“规则”)
.Add(Restriction.EqProperty(“rule.ContractType”、“contract\u outer.Type”))
.Add(子查询.NotExists(子查询B))
.SetProjection(projects.Id());
返回会话。CreateCriteria(“合同外部”)
.Add(subquerys.Exists(subqueryA))
.List();
上述代码引发以下模糊异常:
找不到匹配的条件
信息提供者:contract\u inner.Id=
合同号和单据类型=
rule.DocType
我已经将问题缩小到“contract\u inner.Id=contract\u outer.Id”限制。也许它在向上遍历两层子查询时遇到了问题
我正在使用NHibernate 2.1 btw
我似乎是唯一一个收到此异常的人-如果你搜索异常消息,我的另一篇Stackoverflow帖子会排在第一位。这个问题很相似,但不同。太令人沮丧了!有什么特别的原因要使用标准而不是HQL吗?只是为了整个存储库的一致性。这是一个痛苦的结束w编写查询,然后发现它不起作用,必须将其全部转换为HQL。您考虑过使用Linq2Nhibernate吗?请看这篇文章: