【问题标题】:Efficient complex NHibernate Criteria query高效的复杂 NHibernate Criteria 查询
【发布时间】:2012-06-20 12:10:18
【问题描述】:

我有一个APVendor 类,它有一个APInvoice 类的集合和一个独特的Name;每个APInvoice 都有一个APPayment 类的集合。每个APPayment 对象仅引用一个BankAccount 类、一个ClearedDate、一个Amount 和一个CheckNumber 属性。

如果银行对账单有支票记录,比如我的 Bank of Foo 支票账户,支票 1111,金额为 $1000.00,我想看看我的持久化层中是否存在支付,并标记APPayment对象的ClearedDate属性。

我可以通过查询供应商,然后查询供应商的发票,然后查找针对BankAccount 写的支票号码来做到这一点,但我确信有一种更有效的方法可以将其写成Criteria查询。

有人可以帮我看看它的外观吗?以下是我将如何在 SQL 中编写查询以获取我需要使用的对象图:

select p.*, i.*, v.*
from appayments p
join bankaccounts a on p.bankaccountid = a.bankaccountid
join apinvoices i on i.invoiceid = p.invoiceid
join apvendors v on v.vendorid = i.vendorid
where a.bankaccountid = ????
and p.checknumber = ????

【问题讨论】:

  • 您到底在寻找什么?具有给定 CheckNumber 和给定金额的 APPayment?还有什么限制吗?试着用英文表达你的查询,HQL 查询就会随之而来。
  • @JBNizet,我用 SQL 表达了我想要的东西......它似乎比英语更容易解释。有意义吗?

标签: c# hibernate nhibernate hibernate-criteria nhibernate-criteria


【解决方案1】:

HQL 查询与 SQL 查询非常相似:

select payment from APPayment payment
inner join payment.BankAccount bankAccount
left join fetch payment.Invoice invoice
left join fetch invoice.Vendor vendor
where bankAccount.id = :accountId
and payment.checkNumber = :checkNumber

Criteria 查询留作练习,但我没有看到使用 Criteria 进行此类静态查询的要点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多