在嵌套多次后,我无法让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的解决方法?
答案 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");
如果这对您的实际案例没有帮助,您可以要求提供真实案例的解决方案。我不认为有一般的解决方案。