【问题标题】:How to construct this NHibernate query如何构造这个 NHibernate 查询
【发布时间】:2009-01-23 18:57:20
【问题描述】:

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

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

由于我正在学习,请向我展示使用 Criteria API 和 HQL 的查询。

顺便说一句,是否有任何自动方法可以知道 HQL 与标准表达式相同?

更新:

似乎我在 HQL 中找到了方法:

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

但它做得好吗?表现如何?我的直觉是 count(*) 位置不太好......

【问题讨论】:

  • 我认为如果您发布映射文件、代码类和一些示例数据,您会得到更好的响应。

标签: nhibernate hql


【解决方案1】:

同意@David Pellerin 关于问题的模糊性。然而,我确实只是整理了一个关于这个主题的午餐'n'Learn,所以使用典型的客户,订单关系。 . .

标准 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 的最好的一组视频。强烈推荐。

另一个有用的链接是here。相当复杂,但我已经成功地改编了类似的东西。

【讨论】:

  • 谢谢。我的问题是理论上的,这就是为什么我没有例子。我知道您展示的标准 api 的基本知识,但您没有告诉我我要求的主要内容:在您的示例中,我想获得只有一个订单的客户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-24
相关资源
最近更新 更多