раздражающая проблема N + 1 при вызове критериев. List () - PullRequest
0 голосов
/ 04 мая 2011

см. Подробное описание моих запросов N + 1 при выполнении критерия attribute.list с присоединением к другой присоединенной сущности. Я совершенно не знаю, возможно, у кого-то возникнет идея.

это объекты: (правильно переименованы :)) Заказ -> Горшок <-> Крышка

ордер много-к-одному связан с Потом. (поэтому разные ордера могут указывать на один и тот же банк). В таблице заказов есть поле «PotId» (с ключами из таблицы «Pot»).

Пот - один-к-одному, двунаправленно связан с Покрытием - одна сторона «один-к-одному», другая - «многие-к-одному». На титульном столе есть поле «PotId» (с ключами из таблицы «Pot»).

Проблемы начинаются, когда я выполняю: session.CreateCriteria (typeof (Order)). CreateAlias ​​("pot", "pot", JoinType.LeftOuterJoin) .List ();

то, что я получаю, это один запрос выборки заказов + поты, а затем N запросов выборки покрытия (по cover.PotId). пытался настроить этот способ и другой, но безрезультатно. Я думал, что это может быть связано с вопросом «не ленивая загрузка для однозначных ассоциаций», но я не могу обойти это. есть идеи? будем рады предоставить больше информации.

Ответы [ 2 ]

1 голос
/ 04 мая 2011

Я думаю, что вы хотите указать второй псевдоним / соединение между горшком и покрытием (или чтобы загрузить отношения банка -> покрытие в ваших отображениях).

Существует также .SetFetchMode на ICriteria, который может вас заинтересовать.

0 голосов
/ 04 мая 2011

Попробуйте установить batch-size для объекта Cover на что-то> 1. Когда он собирается получить первый Cover, он должен загрузить любые другие, на которые ссылаются существующие объекты Pot, вплоть допредел batch-size.

...