Fluent nHibernate中的.Fetch.Select()是什么?

Fluent nHibernate中的.Fetch.Select()是什么?,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,在使用Fluent nHibernate开发时,我注意到在关系上我可以指定一个Fetch属性,可以选择Select(),Join(),和Subselect() 我做了一些搜索,得到的信息很少。我确实在nHibernate文档和流畅的nHibernate文档中找到了它们,但它除了给出它们的签名之外几乎没有其他作用,这对我帮助不大 我想知道是否有任何真正的解释,这些是什么,他们真正做什么。我自己也很困惑。从我自己的评估来看,它们似乎改变了被引用实体被拉入对象图的方式,但我还没有完全辨别它们是如何改变

在使用Fluent nHibernate开发时,我注意到在关系上我可以指定一个
Fetch
属性,可以选择
Select()
Join()
,和
Subselect()

我做了一些搜索,得到的信息很少。我确实在nHibernate文档和流畅的nHibernate文档中找到了它们,但它除了给出它们的签名之外几乎没有其他作用,这对我帮助不大

我想知道是否有任何真正的解释,这些是什么,他们真正做什么。我自己也很困惑。从我自己的评估来看,它们似乎改变了被引用实体被拉入对象图的方式,但我还没有完全辨别它们是如何改变的,以及哪一个对于什么情况是最佳的


我确实找到了这篇博文(http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/)这有一点细节,但我仍然对整个情况感到困惑。我还看到了使用
Select()。另外,我在(http://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies)这是针对最初的JavaHibernate平台的,但我认为概念是相同的。在这篇文章中,我的理论似乎有点夸张,因为它更多地关注于它们所做的延迟加载方面,但我仍然没有看到任何真正简单的例子。

我对nHibernate不太熟悉(我使用Hibernate和Java),但基于类比,这使您能够指定希望与给定实体一起加载的关联/集合属性。当您无法完全控制(n)个Hibernate会话时(即,如果Java中的Spring等其他框架正在处理会话/事务),这非常有用。 所以你的假设基本上是正确的。 Select、Join和Subselect是获取相关属性并确定将在数据库中执行何种查询的方法。哪一个是最佳的,实际上取决于你的情况

希望这有点帮助,
干杯。

  • 连接获取-NHibernate使用外部连接在同一选择中检索关联实例或集合

  • 选择获取-第二次选择用于检索关联的实体或集合。除非通过指定lazy=“false”明确禁用延迟抓取,否则只有在实际访问关联时才会执行第二次选择

  • 子选择获取-第二次选择用于检索在上一次查询或获取中检索到的所有实体的关联集合。除非通过指定lazy=“false”明确禁用延迟抓取,否则只有在实际访问关联时才会执行第二次选择

查看获取策略文档