Насколько я знаю, вы не можете помочь с запросом по уровню запроса, как вы можете с извлечением из объединения. Однако, если вы измените mappings и установите режим извлечения по умолчанию для связей как «подзапрос», вы можете быть приятно удивлены:
Из документации Hibernate (одинаково хорошо работает с NHibernate):
С помощью fetch = "subselect" в коллекции вы можете указать Hibernate не только загрузить это
коллекция во втором SELECT (или ленивая или не ленивая), но также и все другие коллекции
для всех «владеющих» сущностей, которые вы загрузили в первый SELECT. Это особенно полезно для
выборка нескольких коллекций параллельно "
Это означает, что когда требуется первая ассоциация, NHibernate вместо загрузки одной ассоциации вызовет запрос, который вы использовали для получения корневого объекта, а затем загрузит данные ассоциации для всех экземпляров типа корневого объекта, которые были возвращается по запросу.
Тем не менее, если вы загружаете 1К сущностей и ожидаете, что ассоциации будут иметь более пары записей каждая, вы, вероятно, просто собираетесь перейти от (ВЫБРАТЬ N + 1) ^ 2 к "святому" дерьмо я просто загрузил всю базу данных в память ". ; -)
(Обратите внимание: если вы делаете это и у вас есть сценарий, в котором вы загружаете список альфа, но вам нужны только связанные бета-версии для одной альфы, вы все равно собираетесь загрузить все из них, и вы ничего не можете с этим поделать На практике, однако, я обнаружил, что это очень редкий сценарий, поэтому обычно выборочный выбор мне очень подходит.)