Этот ответ от Дона на NHUsers решает мою проблему:
Ответ Дона:
У меня есть сопоставление, аналогичное вашему, за исключением того, что я использую сумки вместосписки, у меня inverse = "true", для каскада установлено значение по умолчанию, я явно устанавливаю имя таблицы, у меня разные имена столбцов для каждого ключа, и у меня есть ссылки на то, каким будет ваш контейнер с уникальными именами для каждого из них.Возможно, это обратное = true или разные имена столбцов.
Извините за названия классов хоккеистов.Я сменил их с имен объектов реального домена на месте, и я не чувствую себя очень креативным.Надеюсь, это поможет,
<class name="Form" >
<many-to-one name="CreatorPerson" class="Person" />
<many-to-one name="ProcessorPerson" class="Person" />
</class>
<class name="Person">
<bag name="FormsCreated" inverse="true">
<key>
<column name="CreatorPersonId" not-null="true" />
</key>
<one-to-many class="Person" />
</bag>
<bag name="FormsToProcess" inverse="true">
<key>
<column name="ProcessorPerson" not-null="true" />
</key>
<one-to-many class="Person" />
</bag>
</class>