【发布时间】:2009-08-02 23:35:11
【问题描述】:
给定一个类 A 以一对多的关系与另一个类 B 相关,你如何创建一个 NHibernate 查询(使用 Criteria API--no HQL)来查找所有“没有”的对象 A相关对象 B?具体如下,但我想先解决这个问题。
我有两个模型类,Sample 和 SampleDiagnosis。 Sample 有一个 Diagnoses 属性,它是一个 ISet
我的示例 NHibernate 映射文件的相关部分如下所示:
<set name="Diagnoses" table="sample_diagnoses" cascade="all-delete-orphan" inverse="true">
<key column="sample_id" />
<one-to-many class="SampleDiagnosis" />
</set>
SampleDiagnosis 映射文件的相关部分如下所示:
<many-to-one name="Owner" class="Sample" column="sample_id" />
我正在尝试创建一个 NHibernate ICriteria 查询,该查询将匹配在其诊断列表中没有任何项目的样本。这是我用来构建测试查询的代码:
var dc = DetachedCriteria.For<Sample>();
var subcriteria = dc.CreateCriteria("Diagnoses").SetProjection(Projections.RowCount());
dc.Add(Subqueries.Eq(0, subcriteria));
在我看来,为此生成的 SQL 如下所示:
SELECT * FROM samples WHERE (select count(*) from sample_diagnoses where sample_diagnoses.sample_id = samples.sample_id) = 0
但是,当实际执行 GetExecutableCriteria() 和 List() 结果时,我的代码会崩溃。难的。不会抛出异常,但是无论发生什么运行代码(无论是 NUnit 还是 w3p.exe)都会死得很惨。我在多台机器上试过,结果都一样。我有一种感觉,我错过了关于子查询如何与 NHibernate 中的集合一起工作的一些重要信息。
【问题讨论】:
标签: c# .net nhibernate criteria subquery