NHibernate:DetachedCriteria不止一次嵌套

时间:2011-02-14 07:50:12

标签: nhibernate

在嵌套多次后,我无法让DetachedCriteria正常工作,原因是DetatchedCriteria只能访问高一层的别名实体。

以下不起作用,例如:

var secondNestedCriteria = DetachedCriteria.For<Baz>("baz")
    .SetProjection(Projections.Id())
    .Add(Restrictions.EqProperty("baz.FooName", "foo.Name") // Doesn't work
    .Add(Restrictions.EqProperty("baz.BarName", "bar.Name");

var firstNestedCriteria = DetachedCriteria.For<Bar>("bar")
    .SetProjection(Projections.Id())
    .Add(Restrictions.EqProperty("bar.FooName", "foo.Name")
    .Add(Subqueries.Exists(secondNestedCriteria);

var criteria = Session.CreateCriteria<Foo>("foo")
    .Add(Subqueries.Exists(firstNestedCriteria)
    .List<Foo>();

有没有人知道不涉及使用HQL的解决方法?

1 个答案:

答案 0 :(得分:0)

我从来没有遇到这个问题,我通常使用PropertyIn来加入子查询,但你不能总是这样做。

在这种特殊情况下,您可以使用第二个查询的属性来修复它:

var secondNestedCriteria = DetachedCriteria.For<Baz>("baz")
    .SetProjection(Projections.Id())
    .Add(Restrictions.EqProperty("baz.FooName", "bar.FooName") // is equal to foo.Name
    .Add(Restrictions.EqProperty("baz.BarName", "bar.Name");

如果这对您的实际案例没有帮助,您可以要求提供真实案例的解决方案。我不认为有一般的解决方案。