您可以将“一个聚合,它是另一个聚合的一部分”视为“一个聚合包含另一个聚合的引用”。
例如
public class Order {
private Invoice invoice;
}
<class name="Order" table="T_ORDER">
<one-to-one name="invoice" column="INVOICE_ID" />
</class>
如果在这种情况下 Order 和 Invoice 都是聚合,我将有一个 OrderRepository 和一个 InvoiceRepository。您可以使用检索 Order
orderRepository.findBy(orderId)
您可以使用
检索发票
invoiceRepository.findBy(invoiceId)
或
Order order = orderRepository.findBy(orderId);
Invoice invoice = order.getInvoice();
还有一篇关于如何设计聚合的著名文章 (http://dddcommunity.org/library/vernon_2011/) 建议使用身份参考来实现这种关系。
public Class Order {
private InvoiceId invoiceId;
}
<class name="Order" table="T_ORDER">
<component name="invoiceId">
<property name="value" column="INVOICE_ID" />
</component>
</class>
您可以使用
检索订单
orderRepository.findBy(orderId)
您可以使用
检索发票
invoiceRepository.findBy(invoiceId)
或
Order order = orderRepository.findBy(orderId);
Invoice invoice = invoiceRepository.findBy(order.getInvoiceId());