NHibernate: отдельные критерии, вложенные более одного раза - PullRequest
3 голосов
/ 14 февраля 2011

Я не могу заставить DetachedCriteria работать должным образом после вложения более одного раза, причина в том, что DetatchedCriteria может обращаться к псевдонимам только на один уровень выше.

Следующие не работают, например:1003 *

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 голосов
/ 14 февраля 2011

У меня никогда не было этой проблемы, я обычно использую 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");

Если это не поможет в вашем реальном деле, вы можете попросить решение реального дела.Я не думаю, что есть общее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...