nhibernate ленивые опции загрузки

В моем случае у меня было два телефона Android, подключенных для отладки. Переключение телефонов с помощью выпадающего списка ничего не сделало, поэтому я:

отключил перезапущенную

Android Studio (и проект)

- подключил (одно) устройство, для которого я хотел видеть журналы

, который сделал это для меня. Логи вернулись ... теперь просто чтобы исправить код.

27
задан Kevin Panko 9 February 2016 в 20:33
поделиться

4 ответа

lazy = "proxy" означает, что NHibernate будет лениво инициализировать экземпляры вашего класса; Когда NHibernate извлекает экземпляр вашего класса из базы данных, он - в этом случае - не возвращает «настоящий» экземпляр вашего класса, а скорее предоставит вам прокси. То есть он вернет объект другого типа, точнее, объект, который является подклассом вашего класса (сгенерированный NHibernate посредством генерации IL).

Объект, который вам будет предоставлен, является прокси, и единственное заполненное свойство - это свойство Id. Как только вы вызываете другое свойство экземпляра, NHibernate инициализирует прокси-сервер и извлекает все остальные свойства / коллекции (кроме тех, которые загружаются отложенным образом) из базы данных.

Lazy = "true" используется на другом уровне. . В то время как lazy = "proxy" используется на уровне класса, lazy = "true" используется на уровне коллекции.

19
ответ дан 28 November 2019 в 05:03
поделиться

The documentation reference says that the value of the proxy attribute is in:

lazy="proxy|no-proxy|false"

lazy (optional - defaults to proxy): By default, single point associations are proxied.

lazy="no-proxy" specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation).

lazy="false" specifies that the association will always be eagerly fetched.

9
ответ дан 28 November 2019 в 05:03
поделиться

По умолчанию Hibernate3 использует ленивую выборку для коллекций и ленивую выборку прокси для однозначных ассоциаций. Эти значения по умолчанию имеют смысл для большинства ассоциаций в большинстве приложений.

http://docs.jboss.org/hibernate/stable/core/reference/en/html_single/#performance-fetching-lazy

2
ответ дан 28 November 2019 в 05:03
поделиться

I suspect another way of thinking about it would be this.

class Foo
{
   public virtual Bar SingleBar { get; set; }
   public virtual ICollection<Bar> MultiBar { get; set; }
}
  • lazy="proxy" applies to single objects (ie foo.SingleBar)
  • lazy="true" applies to collections of objects (ie foo.MultiBar)

(You can't set lazy="proxy" to a collection, nor can you set lazy="true" to a single reference. Either will cause NH to throw a XmlSchemaException which is a little cryptic to beginners.)

Operationally they do the same abstract thing: when and only when the property is accessed does NHibernate hit the database and populate the property.

There is however a slight difference in the implementation due what is needed to fetch the objects (in the single case, the reference's id (Bar) was loaded with the parent entity (Foo). In the collection case, the ids are unknown and must be found in another table)

23
ответ дан 28 November 2019 в 05:03
поделиться
Другие вопросы по тегам:

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