我有以下课程:
public class PurchaseOrder
{
...
Store Store { get; protected set; }
User CreatedBy { get; protected set; }
User ApprovedBy { get; protected set; }
...
}
用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”(不要问为什么,我无法更改它)。我调整了一些公司的标准并且必须引用那些类(我不喜欢它但这是一个规则),但我不想获取它们的数据,我希望它很懒。
答案 0 :(得分:2)
您无法覆盖lazy="false"
。
你可以做的就是你所做的完全相反:急切地(FetchMode.Eager
或FetchMode.Join
,这是同义词)。