Все просто.POID должен быть уникальным для всех экземпляров корневого типа сущности.
Рассмотрим следующий пример:
abstract class Vehicle { ... }
class Car : Vehicle { ... }
class Truck : Vehicle { ... }
Если вы должны получить транспортное средство , конкретный тип которого у вас нетне знаю :
var carOrTruck = session.Get<Vehicle>(vehicleId);
... и были и легковой автомобиль, и грузовик с этим идентификатором (который возможен с помощью идентификатора), который из них вернется в NHibernate?(есть более сложные случаи, но это иллюстрирует одну возможную проблему)
Поэтому для таблицы на каждый конкретный класс (довольно плохая стратегия, если вы спросите меня), NHibernate нужен генератор, который гарантирует уникальность среди подклассов.