NHibernate: изменение с ленивого = истинного на выборочное = присоединение возвращает мир - PullRequest
1 голос
/ 12 октября 2009

У меня есть пользовательский объект / отображение в моем приложении. У каждого пользователя есть список контактных данных (телефон, электронная почта и т. Д.)

отображение для пользователя содержит:

<bag name="ContactInfo" table="contact_info" lazy="true" cascade="all">
    <key column="contact_id"/>
    <one-to-many class="...ContactInfo, ..."/>
</bag>

это работает нормально, но у меня проблема выбора n + 1, поэтому мне нужно немного ее оптимизировать. Но по какой-то причине, когда я изменяю это на соединение и выполняю некоторые операции с БД, NH начинает обновлять ВСЕ объекты contact_info в базе данных. Когда я говорю «работа с БД», я не имею в виду изменение контакта. Я имею в виду что угодно.

Кто-нибудь знает почему? ТНХ

РЕДАКТИРОВАТЬ: Просто понял, что он делает это также для lazy = "true", но во второй раз, после загрузки объектов. вопрос почему остается

Ответы [ 2 ]

1 голос
/ 12 октября 2009

Мне интересно, если ваши каскады вызывают проблему. У вас есть каскад = все на вашем графике? Если это так, вы можете пересмотреть свою стратегию жизненного цикла.

Вот пример из раздела 9.9 справочника NHibernate 1.2 (выделение добавлено)

Отображение ассоциации (многие-к-одному, или коллекция) с каскадом = "все" помечает ассоциацию как родитель / отношения детского стиля, где сохранить / обновить / удалить родителя приводит к сохранению / обновлению / удалению дети). Далее, просто Ссылка на ребенка из постоянных родитель приведет к сохранению / обновлению ребенок .

0 голосов
/ 21 октября 2009

оказывается, что поле enum в ContactInfo было проблемой. я не возражал, если это конкретное поле было строкой, поэтому изменение решило эту проблему.

...