I have an APVendor class, which has a collection of APInvoice classes and a unique Name; each APInvoice has a collection of APPayment classes. Each APPayment object references exactly one BankAccount class, a ClearedDate, an Amount, and a CheckNumber property.
With a bank statement that has a check record, let’s say my Bank of Foo checking account, check 1111, for the amount of $1000.00, I want to see if the payment exists in my persisted layer, and mark the APPayment object’s ClearedDate property.
I can do this by querying the vendor, then querying the vendor’s invoices, then looking for that check number written against the BankAccount, but I’m sure there’s a much more efficient way to write this as one Criteria query.
Can someone help me with how that should look? Here’s how I would write the query in SQL to fetch the object graph I would need to work with:
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 = ????
The HQL query would be very similar to the SQL query:
The Criteria query is left as an exercise, but I don’t see the poin tin using Criteria for such a static query.