Если вы хотите, чтобы объекты третьего уровня были записями в одной и той же таблице, я бы добавил дискриминатор к типу третьего уровня. Это может быть вычисляемое свойство, основанное на родительском типе. Используя FluentNH, я думаю, что он должен быть видимым для картографа (вы не можете использовать хитрости, которые ванильный NHibernate должен рефлексивно исследовать частные члены).
Это если вы хотите, чтобы все они были в одной таблице. Если вы не слишком заботитесь о количестве таблиц в своей схеме, вы просто не можете включить дискриминатор, и / или определения схемы типов третьего уровня настолько различаются, что сопоставление с одной таблицей даст «странные» результаты ( как множество пустых столбцов или очень общих / неописательных имен столбцов), а затем просто создайте сопоставление для каждого конкретного подтипа с другой таблицей.
Вы также можете отменить нормализацию схемы. Поскольку это отношение HasOne (), подкласс может содержать столбцы класса третьего уровня с использованием сопоставления компонентов. Если все типы третьего уровня сопоставляются с похожими полями, и вы думаете, что маловероятно, что это отношение изменится с 1: 1 до 1: n, возможно, это правильный путь.