首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nHibernate。动态选择需要添加到结果集的引用

nHibernate。动态选择需要添加到结果集的引用
EN

Stack Overflow用户
提问于 2014-01-14 19:36:26
回答 1查看 390关注 0票数 2

我正在尝试优化对DB的查询。目前,我们有这样的地图,但它可能会在未来增长。我们正在对对象A执行大量的小操作,而且大多数操作都不需要加载所有数据。同时,为了显示UI上的数据,我们需要同时加载所有工作人员。

我试图添加额外的映射,但看起来这里不是这样的。

下面是映射文件:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" default-lazy="false">
    <class name="A" table="A" discriminator-value="?" dynamic-update="true" >

        <cache usage="nonstrict-read-write"/>

        <id name="AId" column="aId">
            <generator class="guid.comb" />
        </id>

        <bag name="B" table="B" inverse="true" outer-join="false" lazy="false" batch-size="50" >
            <cache usage="nonstrict-read-write"/>
            <key column="aId" />
            <one-to-many class="B" />
        </bag>

        <many-to-one name="C" column="cId" class="C" outer-join="true" not-found="ignore" />
        <many-to-one name="D" column="dId" class="D" outer-join="true" not-found="ignore" />

  </class>
</hibernate-mapping>

是否可以在ICriteria中指定只检索痛苦对象A,或任何内部对象B、C或D的对象A

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-15 04:00:25

NHibernate确实有解决方案。事实上,这些场景正是通过这个ORM工具的设计来实现的。但是首先,请停止使用而不是懒散映射。

换句话来说,我们得往下走。保持映射懒惰的,并强制查询临时急切的。要使一些想法读懂:

  • NHibernate很懒,就接受它吧

接下来的步骤。将所有映射更改为lazy="true" ..。或者跳过它,因为懒惰是默认的。不要使用默认的-懒惰=“false”。

有了支持惰性的所有映射,我们就可以在查询中覆盖该行为。因此,实际上,所有这些都将在查询中选择A、B、C,并向DB引擎发送一个SELECT:

代码语言:javascript
复制
var criteria = session.CreateCriteria<A>()
    .CreateAlias("B", "b")
    .CreateCriteria("C");

我们也可以指定连接的类型(内部,左边)。也可以检查NHibernate - CreateCriteria对CreateAlias。还有更多..。

以下是文档(类似的第16章QueryOver)中的一些起点:

  • 15.4。联想
  • 15.5.动态关联提取

一旦更多地使用它(也可以使用one-to-many /集合),也可以检查:

  • 19.1.5.使用批取,为了避免1+N选择
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21122406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档