我正在尝试优化对DB的查询。目前,我们有这样的地图,但它可能会在未来增长。我们正在对对象A执行大量的小操作,而且大多数操作都不需要加载所有数据。同时,为了显示UI上的数据,我们需要同时加载所有工作人员。
我试图添加额外的映射,但看起来这里不是这样的。
下面是映射文件:
<?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
谢谢。
发布于 2014-01-15 04:00:25
NHibernate确实有解决方案。事实上,这些场景正是通过这个ORM工具的设计来实现的。但是首先,请停止使用而不是懒散映射。
换句话来说,我们得往下走。保持映射懒惰的,并强制查询是临时急切的。要使一些想法读懂:
接下来的步骤。将所有映射更改为lazy="true" ..。或者跳过它,因为懒惰是默认的。不要使用默认的-懒惰=“false”。
有了支持惰性的所有映射,我们就可以在查询中覆盖该行为。因此,实际上,所有这些都将在查询中选择A、B、C,并向DB引擎发送一个SELECT:
var criteria = session.CreateCriteria<A>()
.CreateAlias("B", "b")
.CreateCriteria("C");我们也可以指定连接的类型(内部,左边)。也可以检查NHibernate - CreateCriteria对CreateAlias。还有更多..。
以下是文档(类似的第16章QueryOver)中的一些起点:
一旦更多地使用它(也可以使用one-to-many /集合),也可以检查:
https://stackoverflow.com/questions/21122406
复制相似问题