Первое, что я хотел бы сделать, это то, что ваша схема базы данных и ваше описание не совпадают, поэтому, пожалуйста, примите любой совет ниже в свете этого начального предостережения . Вы говорите, что
проект ведется в конкретном филиале
, что подразумевает наличие простого отношения внешнего ключа от проекта к ветви. И, конечно, если схема выглядит именно так, у вас будет двусторонняя таблица ссылок «многие ко многим», и ваша жизнь будет намного проще.
В любом случае, при наличии трехсторонней комбинации у вас должна быть коллекция компонентов, где компоненты имеют свойства многие-к-одному для двух других типов объектов. В разделе 7.2 документации NHibernate есть пример , но я думаю, что это будет выглядеть примерно так в отображении для Product:
<set name="BranchEmployees" table="product_employee_branch" lazy="true">
<key column="product_id">
<composite-element class="Purchase">
<many-to-one name="Branch" class="Branch" />
<many-to-one name="Employee" class="Employee"/>
</composite-element>
</set>