代码之家  ›  专栏  ›  技术社区  ›  Shane Courtrille

如何在将子集合实体加入关联时急取子集合

  •  1
  • Shane Courtrille  · 技术社区  · 14 年前

    假设以下虚拟布局

    Dealership
      has many Cars
         has a Manufacturer
    

    我想写一个查询,上面写着“给我找一个名为X的经销商”,还写着“汽车收藏”,但是在这样做时,请使用一个针对制造商的连接。我认为这需要使用icriteria。我在想这样的事……

    
    var dealershipQuery = Session.CreateCriteria&lt Dealership&gt("d")
                                 .Add(Restrictions.InsenstiveLike("d.Name", "Foo"))
                                 .CreateAlias("d.Cars", "c")
                                 .SetFetchMode("d.Cars", FetchMode.Select)
                                 .SetFetchMode("c.Manufacturer", FetchMode.Join)
                                 .UniqueResult&lt Dealership&gt();
    
    

    但结果查询看起来与我预期的完全不同。我开始认为某个地方可能需要一个分离的标准,但我不确定。

    思想?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Diego Mijelshon    14 年前

    在同一个查询中提取集合几乎不是最佳解决方案。

    此链接详细介绍了最佳方法之一: http://ayende.com/Blog/archive/2010/01/16/eagerly-loading-entity-associations-efficiently-with-nhibernate.aspx

    就我个人而言,我的首选解决方案是 batch-size 在集合和实体中,设置为默认页面长度的大小。这样,上面的查询将使用3个便宜的、可单独缓存的查询来完成,而不是一个昂贵的查询。