我有以下课程:
public class PurchaseOrder
{
...
Store Store { get; protected set; }
User CreatedBy { get; protected set; }
User ApprovedBy { get; protected set; }
...
}
User 和 Store 类使用lazy="false" 选项进行映射。
<class name="User" lazy="false">
更具体地说,它们与使用lazy="false"
选项映射的其他一些实体相关联。而且我不允许更改它。这不是“我的”课程,它们属于其他领域。
我的问题是,每次我获取 PurchaseOrder 时,它都会为这些类及其依赖项产生额外的查询,导致我遇到 SELECT N+1 问题。在 99% 的情况下,我不需要所有这些信息 - 存储 id 和用户 id 对我来说就足够了。尝试使用...
session.CreateCreteria<PurchaseOrder>()
...
.SetFetchMode("CreatedBy", FetchMode.Lazy)
.SetFetchMode("ApprovedBy", FetchMode.Lazy)
.SetFetchMode("Store", FetchMode.Lazy)
...
..但这无济于事。
我怎样才能强迫这些关联变得懒惰并忽略lazy="false"
?
只是要清楚。存储在 User 和 Store 类中的信息对我的域没有用。所以我根本不希望它被获取。此外,如果我在查询中加入用户和商店,它将导致对也映射为lazy="false" 的实体的查询链(不要问为什么,我无法更改它)。我符合某些公司的标准并且必须引用这些类(我不喜欢它,但这是一个规则),但我不想获取他们的数据,我希望它懒惰。