代码之家  ›  专栏  ›  技术社区  ›  mattcole

在NHibernate中选择具有ICriteria的联合实体

  •  0
  • mattcole  · 技术社区  · 16 年前

    在HQL中,我可以这样做:

    select roleHeldByOwner.TargetPerson
    from Person roleOwner
    join roleOwner.RolesOnPeople roleHeldByOwner
    where roleOwner.Id = :roleOwnerId
    

    如何在条件查询中实现相同的功能?特别是选择一些不是 from 条款。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Stuart Childs    16 年前

    您可以通过创建子条件并选择带有投影的标量结果来联接。条件查询可能如下所示:

    session.CreateCriteria(typeof(Person))
        .Add(Restrictions.Eq("Id", roleOwnerId))
        .SetProjection(Projections.Property("TargetPerson"))
        .CreateCriteria("RolesOnPeople", JoinType.InnerJoin) // Or LeftOuterJoin, etc.
        .List();
    

    如果需要多个投影,请使用如下项目列表:

    .SetProjection(Projections.ProjectionList()
        .Add(Projections.Property("...", ...))
        .Add(...)
        ...
    )
    

    我不知道你的域名是什么样子,也不知道你想从查询中得到什么,所以上面的内容可能不完全正确。但是,它应该是您开始所需要的。