Выбор объединенной сущности с ICriteria в NHibernate - PullRequest
0 голосов
/ 04 июня 2009

В HQL я могу сделать что-то вроде этого:

select roleHeldByOwner.TargetPerson
from Person roleOwner
join roleOwner.RolesOnPeople roleHeldByOwner
where roleOwner.Id = :roleOwnerId

Как мне добиться того же в запросе Criteria? В частности, выберите что-то, что не является первой сущностью в предложении from.

1 Ответ

1 голос
/ 04 июня 2009

Вы можете присоединиться, создав подкритерии и выбрав скалярные результаты с помощью Прогнозов. Ваш запрос Criteria может выглядеть примерно так:

session.CreateCriteria(typeof(Person))
    .Add(Restrictions.Eq("Id", roleOwnerId))
    .SetProjection(Projections.Property("TargetPerson"))
    .CreateCriteria("RolesOnPeople", JoinType.InnerJoin) // Or LeftOuterJoin, etc.
    .List();

Если вам нужно несколько проекций, используйте ProjectionList, например:

.SetProjection(Projections.ProjectionList()
    .Add(Projections.Property("...", ...))
    .Add(...)
    ...
)

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

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