It's simple. The POID must be unique to all instances of the root entity type.
Consider the following example:
abstract class Vehicle { ... } class Car : Vehicle { ... } class Truck : Vehicle { ... }
If you were to receive a vehicle whose specific type you do not know:
var carOrTruck = session.Get<Vehicle>(vehicleId);
... and there were both a car and a truck with this Id (which is possible with an individual), which one will be returned to NHibernate? (there are more complicated cases, but this illustrates one possible problem)
Therefore, for table-per-specific-class (a pretty bad strategy, if you ask me), NHibernate needs a generator that guarantees uniqueness in subclasses.
source share