我在映射中有一组如下:
<set name="Persons" cascade="all" inverse="true" lazy="true">
<key column="idDepartment" />
<one-to-many class="Person" />
</set>
我想懒惰地加载孩子persons
,但是persons类有很多列,所以数据量总是很大。如果我只想延迟加载一列,例如personid
,我该怎么做?
我在映射中有一组如下:
<set name="Persons" cascade="all" inverse="true" lazy="true">
<key column="idDepartment" />
<one-to-many class="Person" />
</set>
我想懒惰地加载孩子persons
,但是persons类有很多列,所以数据量总是很大。如果我只想延迟加载一列,例如personid
,我该怎么做?
默认情况下不,你不能。
你有两个选择。将您很少需要的所有属性标记为延迟加载。然后将使用属性子集获取实体,而稍后获取其他实体。但这会严重损害整体性能。
第二种选择是发出单独的查询,以获得您想要的一些确切的列。Nhiberante 有 projectins,或者你可以使用 LINQ。
如果您的用例是您只需要加载几个人,您可以考虑使用lazy="extra"。
您还可以质疑 Person 的设计——也许一个较小的 Person 实体引用更具体和详细的数据是有益的?
另一种选择是根本没有 Department.Persons 集合。我发现我倾向于避免这样的收藏,例如收藏很大而收藏所有者并不真正拥有收藏中的物品。