В этом случае можно использовать хранимую процедуру, используя конструкцию отображения, подобную следующей:
<sql-query name="LoadUsersAndTransactions" xml:space="preserve">
<return class="User" alias="u">
<return-property name="ID" column="user_id" />
<return-property name="Name" column="name" />
</return>
<return-join property="u.Transactions" alias="t">
<return-property name="key" column="user_id" />
<return-property name="element" column="item_id" />
<return-property name="element.id" column="item_id" />
<return-property name="element.Amount" column="amount" />
</return-join>
EXEC dbo.SelectUsersAndTransactions :param_1, ..., :param_N
</sql-query>
В этом примере предполагается, что транзакции отображаются в виде пакета в классе User. Вы бы использовали этот запрос следующим образом из C #:
IList<User> users = session
.GetNamedQuery("LoadUsersAndTransactions")
.SetString("param_1", parameterValue1)
...
.SetString("param_N", parameterValueN)
.List<User>();
Документация NHibernate по использованию пользовательских SQL-запросов здесь .
Cheers,
Герка.