1

在我们的应用程序中,我们根据应用程序需要将各种对象设置为lazy false。然而,在一个用例中,我们希望忽略 HBM 文件中的所有惰性设置,只获取目标对象。

所以问题是:有没有办法在 HQL 中指定只获取目标对象而不管 HBM 设置如何?

~斯里兰卡

4

2 回答 2

1

您可以在执行之前在 Criteria 上使用setFetchMode来覆盖 HBM 文件设置

于 2009-05-15T06:48:35.680 回答
0

抱歉,不确定您是否理解您的问题。

如果您必须为特定类实现它,则可以使用 SetFetchMode。

var query = session.CreateCriteria(typeof(MyClass));
query.SetFetchMode("PropertyA", FetchMode.Select);
query.SetFetchMode("PropertyB", FetchMode.Select);

注意:对于多对一引用,实体类本身必须映射为lazy=true。如果没有,NHibernate 甚至不会为它创建代理类。


如果您想以通用的、与类型无关的方式延迟加载类型,这就是答案:

您可以使用元数据找到它们并将获取模式添加到条件

我没有尝试过,但我将从以下代码开始:

var meta = sessionfactory.GetClassMetaData(typeof(MyClass));

var query = session.CreateCriteria(typeof(MyClass));

for(int index = 0; index < meta.PropertyType.Length; index++)
{
  if (meta.PropertyType[index] == NHibernateUtil.Entity)
  {
    query.SetFetchMode(meta.PropertyNames[index], FetchMode.Select);
  }
}

这不包括集合。它们可能与 一起找到factory.GetCollectionMetadata(roleName),但您需要找出roleName.

于 2009-05-15T07:03:20.403 回答