Немного поздно, но у меня есть несколько советов.
Если вы используете «таблица на конкретный класс», это как если бы вы отображали полностью независимые таблицы. Поэтому вам нужны отдельные внешние ключи или многие-к-любому.
"многие для любого" хранит имя типа, а NH знает, куда указывает внешний ключ. Но невозможно иметь ограничения для такого внешнего ключа.
Если у вас есть несколько сумок с предметами одного типа, убедитесь, что все они определяют разные внешние ключи:
<class name="A">
<!-- ... -->
<bag name="Events">
<key column="A_FK"/>
<one-to-many class="Event"/>
</bag>
</class>
<class name="B">
<!-- ... -->
<bag name="Events">
<key column="B_FK"/>
<one-to-many class="Event"/>
</bag>
</class>
Вы можете иметь ограничения внешнего ключа для такого внешнего ключа, но нет ограничения не-null, потому что используется только один из этих внешних ключей.
Чтобы действительно иметь только один внешний ключ со всеми ограничениями, необходимо сопоставить элемент с отдельной таблицей.