#nhibernate #nhibernate-mapping
#nhibernate #nhibernate-сопоставление
Вопрос:
смотрите подробное описание моих N 1 запросов при выполнении criteria.list с присоединением к другому присоединенному объекту. Я сейчас совершенно невежественен, возможно, у кого-нибудь появится идея.
это объекты: (правильно переименованные 🙂 ) Порядок -> Горшок <-> Крышка
порядок много к одному связан с Pot. (таким образом, разные ордера могут указывать на один и тот же банк). В таблице заказов есть поле «PotId» (с ключами из таблицы Pot).
Pot является взаимно однозначным, двунаправленно связанным с Cover — одна сторона «один к одному», другая — «много к одному». В таблице обложки есть поле «PotId» (с ключами из таблицы Pot).
Проблемы начинаются, когда я выполняю: session.Создайте критерий(typeof (порядок)).Создайте ALIAS(«горшок», «pot», JoinType.Соединение по левому краю).Список();
что я получаю, так это один запрос, извлекающий заказы банки, а затем N запросов, извлекающих обложку (по обложке.PotId). пробовал настраивать этот способ и другой, но безрезультатно. Я думал, что это может быть связано с проблемой «нет отложенной загрузки для взаимно однозначных ассоциаций», но я не могу обойти это. есть идеи? будем рады предоставить дополнительную информацию.
Ответ №1:
Я думаю, вы хотите, чтобы между pot и cover был указан второй псевдоним / объединение (или чтобы хотелось загрузить отношение pot -> cover в ваших сопоставлениях).
Существует также .Установите режим выборки в ICriteria, который может показаться вам интересным.
Комментарии:
1. Я рассматривал возможность получения соответствующих обложек заранее, но запрос генерируется динамически, и это усложняет задачу. Я также думал о стремительной загрузке отношения pot-> cover, но в реальном примере Order также указывает на Pot (многие к одному), и у меня есть два объединения в одной таблице — и все еще я вижу некоторые объекты, загруженные после запроса this (очень странно, не уверен почему). Я также использовал SetFetchMode (и другой createCriteria), но я вижу более или менее те же результаты…
Ответ №2:
Попробуйте установить для вашего batch-size
объекта Cover
значение > 1. Когда он перейдет к получению первого Cover
, он должен загрузить любые другие, на которые ссылаются существующие Pot
объекты, до предела batch-size
.
Комментарии:
1. Я могу попробовать это, но я предпочитаю решение, которое заключается в O (1) обходах базы данных и O (1) запросах.