c# – NHibernate Criteria API是否支持对集合属性的预测?

我需要使用条件API复制以下工作HQL查询.

session.CreateQuery(
    "select c " +
    "from Parent p " +
    "inner join p.Children c " +
    "where p.Id = 9 " +
    "and c.Id = 33")
    .SetMaxResults(3)
    .List();

查询选择满足属于满足其他条件的父项的特定条件的所有子项.
在我的例子中,两个标准都是简单的Id等式,但它们可以是任何东西.

由于某种原因,等效标准API查询返回具有正确数量的项目的列表,但这些项目都为空.

session.CreateCriteria(typeof (Parent))
    .Add(Restrictions.Eq("Id", 9))
    .CreateCriteria("Children")
    .Add(Restrictions.Eq("Id", 33))
    .SetProjection(Projections.Property("Children"))
    .SetMaxResults(3)
    .List();

为什么这两个查询不会返回相同的结果?

以下是HQL查询生成的SQL:

SELECT   TOP 3 childid7_,
               name7_
FROM     (SELECT children1_.childid                 AS childid7_,
                 children1_.name                    AS name7_,
                 Row_number()
                   OVER(ORDER BY current_timestamp) AS __hibernate_sort_row
          FROM   dbo.parent parent0_
                 LEFT OUTER JOIN dbo.child children1_
                   ON parent0_.parentid = children1_.parentid
          WHERE  (parent0_.parentid = 9)
                 AND (children1_.childid = 33)) AS QUERY
WHERE    QUERY.__hibernate_sort_row > 0
ORDER BY QUERY.__hibernate_sort_row

以下是Criteria API查询中的SQL:

SELECT   TOP 3 y0_
FROM     (SELECT this_.parentid                     AS y0_,
                 Row_number()
                   OVER(ORDER BY current_timestamp) AS __hibernate_sort_row
          FROM   dbo.parent this_
                 INNER JOIN dbo.child child1_
                   ON this_.parentid = child1_.parentid
          WHERE  this_.parentid = @p0
                 AND child1_.childid = @p1) AS QUERY
WHERE    QUERY.__hibernate_sort_row > 0
ORDER BY QUERY.__hibernate_sort_row

请注意,父级和子级之间的连接是单向的.子实体没有指向其父级的引用属性.

任何人都可以提出一个可以让我解决这个限制的替代方案吗?

在这里查看 http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx中的“仅查询”属性

这将允许您使查询的链接看起来是双向的.

相关文章
相关标签/搜索