Есть хорошие и плохие новости. Вы можете создать критерий, который будет возвращать список ModelTypes. Однако они не будут управляться сессией. Причина в том, что отдельный запрос может возвращать только проекцию, а проекции всегда неуправляемые.
Приведенный ниже запрос сгенерирует запрос, аналогичный приведенному выше, поскольку он выполняет внутреннее соединение двух сущностей и возвращает отдельный набор на основе этих двух столбцов. Преобразователь результата должен быть настроен на генерацию некоторого типа, который может быть установлен через свойства. Вероятно, вы можете вернуть список ModelTypes, но просто знайте, что они не будут управляться сессией.
Session.CreateCriteria<Model>()
.CreateAlias("Type", "t")
.Add(Restrictions.Eq("Qualifier", myQualifier)
.SetProjection(Projections.Distinct(
Projections.ProjectionList()
.Add(Projections.Alias(Projections.Property("t.Id"), "Id"))
.Add(Projections.Alias(Projections.Property("t.TypeName"), "TypeName"))))
.SetResultTransformer(Transformers.AliasToBean<ModelType>())