代码之家  ›  专栏  ›  技术社区  ›  Jamie Ide

使用criteriaapi查询多对多而不选择所有对象

  •  1
  • Jamie Ide  · 技术社区  · 14 年前

    我有一个项目和网站之间的多对多的关系。我正在尝试使用criteriaapi检索项目的站点列表。我已经完成了这项工作,但是查询还选择了关联项目的所有列,这是我不想要的。我用HQL编写了一个等价的查询,它只选择Site列。

    var target1 = session.CreateQuery("select s from Site s join s.Projects pr where pr.ProjectId = ?")
        .SetInt32(0, projectId)
        .List<Site>();
    
    var target2 = session.CreateCriteria<Site>()
        .CreateAlias("Projects", "pr")
        .Add(Restrictions.Eq("pr.ProjectId", projectId))
        .List<Site>();
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   cbp    14 年前

    我不确定这是否是最好的方法,但我使用SqlProjection实现了这一点:

    Session.CreateCriteria<T>("foo")
                .CreateAlias("foo.Bar", "bar")
                .SetProjection(Projections.SqlProjection("{alias}.*", new string[] {}, new IType[] {}))
                .SetResultTransformer(new AliasToBeanResultTransformer(typeof(Foo)))
                .List<Foo>();
    

    SELECT this_.* FROM Foo this_ inner join Bar b1_ on this_.BarId=b1_.Id