Как написать запрос Criteria с несколькими объединениями - PullRequest
2 голосов
/ 16 декабря 2008

Я пытаюсь кодировать следующий HQL-запрос, используя Criteria API:

var userList = _session
                .CreateQuery("select u from User u where u.Role.ID=3 and u.Customer.ID=:cID")
                .SetInt32("cID", 1)
                .List<User>();

(3 объекта NHibernate: пользователь (идентификатор, имя, роль, клиент), роль (идентификатор, имя) и клиент (идентификатор, имя).

Я попробовал следующее, но это не работает, потому что NHibernate пытается найти клиента, связанного с ролью:

var userList = _session
            .CreateCriteria(typeof(User))
            .CreateCriteria("Role")
            .Add(Restrictions.Eq("ID", 3) )
            .CreateCriteria("Customer")
            .Add(Restrictions.Eq("ID", 1) )
            .List<User>();

Есть ли другой способ (это работает!) Сделать это?

1 Ответ

4 голосов
/ 17 декабря 2008

Вы можете использовать псевдоним

var userList = _session
        .CreateCriteria(typeof(User), "u")
        .CreateAlias("u.Role", "r")
        .Add(Restrictions.Eq("r.ID", 3) )
        .CreateAlias("u.Customer", "c")
        .Add(Restrictions.Eq("c.ID", 1) )
        .List<User>();

Надеюсь, это поможет

...