代码之家  ›  专栏  ›  技术社区  ›  Nicolas Cadilhac

如何构造这个NHibernate查询

  •  1
  • Nicolas Cadilhac  · 技术社区  · 17 年前

    我有一对多的关系。我想构建这个查询:

    给我所有只有一个孩子的父母,为了这个孩子 child.Type=X

    因为我正在学习,请用criteriaapi和HQL向我展示查询。

    顺便问一下,有没有自动的方法可以知道HQL和条件表达式是相同的吗?

    更新:

    @"select Parent
        from Parent parent
            join parent.Children ch
            where (ch.Type = :chType) and
                  (select count(*) from parent.Children) = 1")
    

    但做得好吗?表演怎么样?我的直觉是伯爵(*)位置不好。。。

    1 回复  |  直到 8 年前
        1
  •  1
  •   joshua.ewer    17 年前

    只是

    标准API:

    public IList<Customer> GetCustomersWithOrdersAfterDate(DateTime sinceDate)
    {
       return Session.ICriteria.CreateCriteria(typeof(Customer))
          .CreateCriteria("Orders")
          .Add(Expression.Gt("OrderDate", sinceDate))
          .List<Customer>();
    }
    

    HQL(看起来很像SQL,只是你不必知道整个关系图):

    public IList<Customer> GetCustomersWithOrdersAfterDate(DateTime sinceDate)
    {
        Session.CreateQuery("select c from Customer c, c.Orders.elements o WHERE o.OrderDate > :orderDate).SetDateTime("orderDate", sinceDate).List<Customer>();
    }
    


    如果你只是在学习,停止你正在做的一切,去看看 these screencasts . 可能是我看过的关于nHibernate最好的一组视频了。强烈,强烈推荐。

    解决“having count=1”要求的另一个有用的链接是 here