Покупка "знает" о своих платежах - так что спросите.ака «не звони мне, я позвоню тебе»
Лично я создаю иерархию классов, подобную
Purchases
Purchase
PurchaseDAO
Payments
Payment
PaymentDAO
Purchases purchases = Purchases.find(criteria);
// user selects one of the purchases (say)
Purchase = purchase.load(purchaseId);
// calls
PurchaseDAO.load(purchaseId);
// which calls
Payments payment = Purchase.findPayments();
// calls
Payments.find(purchaseId);
// calls
PaymentDAO.find(purchaseId);
В конце у вас будет объект «Покупка», о котором вы можете опрашиватьего платежи.Если существует вероятность того, что будет совершено много платежей против покупки, вы можете отложить загрузку платежей до тех пор, пока это необходимо.
Это выглядит как дополнительная работа (и есть), но она позволяет четко разделить логику бизнеса и постоянства, и я нахожу выплатыподдержать небольшие инвестиции в создание дополнительных классов.