是否有可能在NHibernate中加载两个一对多关系?

时间:2009-03-17 11:29:23

标签: nhibernate eager

给定对象层次结构,如下所示:

class Category
{
    List<SubCategory> SubCategories;
}

class SubCategory
{
    List<Product> Products;
}

class Product
{
}

是否可以使用NHibernate急切加载整个层次结构?我想执行一个查询来加载所有类别,包括子类别和急切加载的产品。

1 个答案:

答案 0 :(得分:1)

是的,有可能......但是,您认为这不会对性能产生影响吗?您可能会检索大量数据。

为了做到这一点,你必须使用你将用来检索实例的ICriteria的'SetFetchMode'方法。

这样的事情:

ICriteria crit = session.CreateCriteria (typeof(Category));

crit.SetFetchMode ("SubCategories", FetchMode.Eager);

或者,也许使用CreateAlias:

ICriteria crit = session.CreateCriteria (typeof(Category));

crit.CreateAlias ("SubCategories", "sc", JoinType.LeftOuterJoin);
crit.CreateAlias ("sc.Products", "p", JoinType.InnerJoin);

也许你必须根据你的情况/你想要的东西来玩一些可能的JoinTypes。