我有一个APVendor
类,它有一个APInvoice
类的集合和一个独特的Name
;每个APInvoice
都有一个APPayment
类的集合。 每个APPayment
对象只引用一个BankAccount
类、一个ClearedDate
、一个Amount
和一个CheckNumber
属性。
对于具有支票记录的银行对账单,假设我的 Bank of Foo 支票账户 Check 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 = ????
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
条件查询保留为练习,但我没有看到使用此类静态查询的条件的指针。