Что такое .Fetch.Select () в Fluent nHibernate? - PullRequest
7 голосов
/ 26 июля 2011

При разработке с Fluent nHibernate я заметил, что в отношениях я могу указать свойство Fetch с возможными параметрами Select(), Join() и Subselect().

Я провел несколько поисков и получил очень мало информации. Я нашел их в документации по nHibernate и в свободной документации по nHibernate, но это мало чем отличает их от подписей, что мне не особо помогает.

Мне было интересно, есть ли какое-нибудь реальное объяснение того, что это такое, и что они действительно делают. Я был довольно озадачен сам. Исходя из моей собственной оценки, они, похоже, меняют способ, которым ссылочные объекты включаются в граф объектов, но я еще не полностью понял как они меняют его, и какой из них оптимален для какой ситуации ...

Я нашел это сообщение в блоге (http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/), в котором есть немного деталей, но я все еще довольно озадачен всей ситуацией. Я также видел другие примеры, в которых использование Select() более оптимально, но причины этого. Кроме того, я нашел пост в (http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies)), который ориентирован на оригинальную платформу Java Hibernate, но я предполагаю, что концепция та же. на ленивый аспект загрузки, что они делают, но я до сих пор не видел действительно плоских примеров.

Ответы [ 2 ]

21 голосов
/ 12 июля 2013
  • Выборка соединения - NHibernate извлекает связанный экземпляр или коллекцию в том же SELECT, используя OUTER JOIN.

  • Выбрать выборку - второй SELECT используется для получения связанной сущности или коллекции.Если вы явно не отключите отложенную выборку, указав lazy = "false", этот второй выбор будет выполняться только при фактическом доступе к ассоциации.

  • Выборка подвыбора - aВторой SELECT используется для извлечения связанных коллекций для всех сущностей, извлеченных в предыдущем запросе или выборке.Если вы явно не отключите отложенную выборку, указав lazy = "false", этот второй выбор будет выполняться только при фактическом доступе к ассоциации.

Проверьте документ стратегии выборки @Документация Nhibernate

3 голосов
/ 26 июля 2011

Я не очень знаком с nHibernate (я работаю с Hibernate и Java), но, основываясь на аналогии, это позволяет вам указать свойство ассоциации / коллекции, которое вы хотите загружать с заданной сущностью.Это полезно, когда у вас нет полного контроля над (n) сессиями Hibernate (т. Е. Если какая-то другая среда, такая как Spring в Java, занимается сессиями / транзакциями).Так что ваше предположение в основном верно.Select, Join и Subselect - это способы получения связанного свойства и определения, какой тип запроса будет выполняться в базе данных.Какой из них оптимален, действительно зависит от вашей ситуации.

Надеюсь, это немного поможет,
Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...