如何在Data Mapper中加载一对多关系?

时间:2009-12-29 23:20:38

标签: database database-design orm datamapper

虽然我将以1:1的关系选择Ghost模式,但我不确定这是否足以构成1:n的关系。

例如,当我加载一个可能有一百个Item对象的Order对象时,我首先会为items属性指定NULL。

问题是:

A)我应该分配NULL然后,在第一次访问items属性时查找该项的所有订单并加载所有这些订单吗?

B)或者我应该只加载一个只包含所有order_id的轻量级记录集,并加载100个Item Ghost对象,这些对象只设置了order_id,但其他一切都是NULL - 并且只要访问Item对象就可以获取更多细节从它,懒惰加载特定的Item对象数据?

1 个答案:

答案 0 :(得分:1)

IMO你对延迟加载的需求在每种情况下都有所不同。但是,我会说,如果您的订单足够大,可以有100件商品,那么您很少有时间同时加载所有100件商品。

我建议您按需加载每个项目,以便加载“page”项目或只加载一个项目。例如,如果您需要列出所有项目,您可以加载“page”该列表,并且由于每个项目都可以按需加载,您只需加载所选页面即可。此外,为了提高性能,您可能希望回收这些对象,以便您可以考虑构建说10 Ghost项目,然后一次将“page”加载到这10个项目中。

另一方面,由于项目按需加载,您只需加载一个项目,只有在您需要时才能显示该项目的完整详细信息。