0

我在映射中有一组如下:

<set name="Persons" cascade="all"  inverse="true" lazy="true">
  <key column="idDepartment" />
  <one-to-many class="Person" />
</set>

我想懒惰地加载孩子persons,但是persons类有很多列,所以数据量总是很大。如果我只想延迟加载一列,例如personid,我该怎么做?

4

2 回答 2

1

默认情况下不,你不能。

你有两个选择。将您很少需要的所有属性标记为延迟加载。然后将使用属性子集获取实体,而稍后获取其他实体。但这会严重损害整体性能。

第二种选择是发出单独的查询,以获得您想要的一些确切的列。Nhiberante 有 projectins,或者你可以使用 LINQ。

于 2012-09-11T07:55:18.177 回答
0

如果您的用例是您只需要加载几个人,您可以考虑使用lazy="extra"。

您还可以质疑 Person 的设计——也许一个较小的 Person 实体引用更具体和详细的​​数据是有益的?

另一种选择是根本没有 Department.Persons 集合。我发现我倾向于避免这样的收藏,例如收藏很大而收藏所有者并不真正拥有收藏中的物品。

于 2012-09-11T10:26:32.487 回答