Отношение многие-к-одному означает, что экземпляр AppState может быть назначен максимум одному экземпляру AppSignature. Для AppSignature может быть назначено любое количество экземпляров AppState. Это отношение реализовано как внешний ключ от таблицы app_states к таблице app_signatures. Атрибут «Столбец» в элементе «многие к одному» определяет имя столбца, в котором хранится значение для внешнего ключа. В столбце Id отображаются два члена AppState: Id и app_signature, что невозможно в NH и приводит к описанному исключению.
Исправить несложно:
<many-to-one name="app_signature"
class="AppSignature"
column="app_signature_id"
foreign-key="id_fom_app_signature"
not-null="true"
>
</many-to-one>
Имя столбца, который реализует внешний ключ, было изменено на уникальное имя: «app_signature_id». Теперь элемент app_signature сопоставляется со столбцом AppState.app_signature_id, который указывает на столбец app_signatures.Id
Однако описанное исключение должно исчезнуть (если новый столбец правильно добавлен в таблицу app_signatures), оно не обязательно будет тем, что вы действительно хотите. Связь между AppState и AppSignature может быть взаимно-однозначной. Это означает, что экземпляр AppState может быть назначен одному экземпляру AppSignature и наоборот. Такое отношение может быть реализовано с помощью первичного и внешнего ключа в одном столбце. Есть очень хорошая статья об отношениях один к одному.