Cie*_*iel 7 nhibernate fluent-nhibernate
虽然与功能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平台的帖子,但我认为这个概念是相同的.在这一篇中,我的理论似乎有点夸张,因为它更多地关注他们所做的懒惰加载方面,但我还没有看到任何真正平坦的例子.
Gra*_*rne 22
连接提取 - NHibernate使用OUTER JOIN在同一个SELECT中检索关联的实例或集合.
选择提取 - 第二个SELECT用于检索关联的实体或集合.除非通过指定lazy ="false"显式禁用延迟提取,否则只有在实际访问关联时才会执行第二次选择.
子选择提取 - 第二个SELECT用于检索在先前查询或提取中检索的所有实体的关联集合.除非通过指定lazy ="false"显式禁用延迟提取,否则只有在实际访问关联时才会执行第二次选择.
查看提取策略文档@ The Nhibernate Documentation
我不太熟悉 nHibernate(我使用 Hibernate 和 Java),但基于类比,这使您能够指定您想要与给定实体急切加载的关联/集合属性。当您无法完全控制 (n)Hibernate 会话时(即,如果 Java 中的 Spring 等其他框架正在处理会话/事务),这非常有用。所以你的假设基本上是正确的。Select、Join、Subselect是获取相关属性的方法,并决定在数据库中执行什么样的查询。哪一种是最佳的,实际上取决于您的情况。
希望这会有所帮助,
干杯。
归档时间: |
|
查看次数: |
7036 次 |
最近记录: |