редактировать:
взято из здесь
Представьте себе случай интернет-магазина, который продает рубашки. Каждая модель рубашки поставляется в определенном количестве доступных размеров. Вы хотите, чтобы запрос нашел все модели рубашек с размерами более 40. В HQL запрос может быть следующим:
from Shirt shirt
join shirt.availableSizes size
where size.number > 40
Используя Criteria API, вы используете createCriteria () для создания внутреннего соединения между двумя таблицами, как в следующем примере:
session.createCriteria (Shirt.class)
.createCriteria ( "availableSizes")
.add (Expression.gt ("число", новое целое число (40)))
.list ();
В вашем случае синтаксис должен выглядеть примерно так:
session.CreateCriteria<User>
.CreateCriteria("Roles")
.Add(Expression.Eq("Id", your_role_id)
.List<User>(); (oooops, NHibernate syntax...)
Другой способ сделать это - добавить список пользователей к каждой роли (ленивое соединение, чтобы у вас не возникало проблем с производительностью в других местах) и просто получить оттуда набор пользователей. 1026 *