Каково влияние ленивых = “ложь” на элементе класса отображения NHibernate?

Map.keySet() (неудивительно) возвращает клавиш , а не значений .

Чтобы получить значения , используйте (опять же, что неудивительно) Map.values().

Итерация по всем парам ключ / значение, то есть записей :

for (Map.Entry<String, Entry<String, String>> entry : treeMap.entrySet()) {
    // showing how to get at the parts:
    String key = entry.getKey();
    String valueKey = entry.getValue().getKey();
    String valueValue = entry.getValue().getValue();

}

Это необычный способ решения любой проблемы, которую вы пытаетесь решить потому что каждый ключ имеет только одно значение, поэтому у вас есть «ключ -> ключ -> значение», которое совпадает с просто «ключ -> значение». Попробуйте отказаться от карты внешнего слоя и использовать только Map<String, String>, и / или использовать классы с (именованными) полями для хранения ваших данных.

10
задан Brian Sullivan 3 March 2009 в 14:02
поделиться

3 ответа

Я всегда указываю lazy=false на уровне класса в NHIbernate, потому что я не хочу это, NHibernate вынуждает меня объявить, что свойства должны быть виртуальными, если я не хочу это в своей модели класса.

Когда Вы указываете 'ленивый' при отображении класса (значение по умолчанию), NHibernate использует 'Динамический' класс Прокси во времени выполнения. Этот Динамический Прокси является классом, который наследовался Вашему классу. Затем насколько я понимаю, экземпляр класса должен быть инициализирован лениво / по запросу. В некоторых случаях это должно быть лучше для производительности (по крайней мере, это - то, что говорится).

Но, так как мне не нравится это, NHibernate говорит мне, как мой класс должен быть похожим, я всегда указывал lazy=false для всех своих классов, и я не имею, столкнулся с проблемой все же.:)

4
ответ дан 4 December 2019 в 02:52
поделиться

Используя ленивую загрузку является очень эффективным при ограничении количества объектов. Эта функция может быть чрезвычайно полезной в определенных ситуациях. Например, предположите, что у Вас было два Пользователя объектов и Роль и что у всех Пользователей есть 1 или более ролей. При загрузке Пользовательского объекта Вы также хотели бы загрузить все его связанные Роли. Однако при загрузке Ролей для того Пользователя Вы не хотели бы загружать всех Пользователей, связанных с той Ролью, потому что это может завершить загрузку всей базы данных Пользователей.

Так устанавливая ленивый = ложь означает, что весь набор объектов для отношений будет загружен, когда экземпляр вызова будет загружен. В некоторых ситуациях это прекрасно, хорошее, и соответствующее в других ситуациях, это может привести к проблемам производительности.

2
ответ дан 4 December 2019 в 02:52
поделиться

Роб, Это просто плохой дизайн. Пользователь будет иметь Список типа Роль, но Роль не будет иметь Список типа Пользователь. Пользователь - это совокупный корень, чтобы получить всех пользователей в роли, определите для пользователя метод GetByRole (). Двухсторонние обходы, подобные описанным вами, создают ужасную модель предметной области. Погуглите "циклические ссылки" и посмотрите, почему это плохо.

1
ответ дан 4 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: