创建一对多映射,其中许多可以是不同的对象类型

Posted

技术标签:

【中文标题】创建一对多映射,其中许多可以是不同的对象类型【英文标题】:Creating One-To-Many mapping where Many can be different object types 【发布时间】:2011-03-16 23:43:17 【问题描述】:

我正在探索改造现有数据库以使用 Doctrine 的可行性。

我有三个表,StockRequest、SalesOrder、WorkOrderStockRequest 具有字段 TypeTypeNo。 Type用于决定是否与SalesOrder或WorkOrder有关系,TypeNo是SalesOrder/WorkOrder的key。

维持这种关系的推荐方法是什么?

阅读教义文档,它提到了一个存储库类,我可以使用它来基于 Type 有条件地获取,只维护一个 StockRequest 实体。

另一种可能性是对 StockRequest 类进行子类化,以便我拥有 SalesOrderStockRequestsWorkOrderStockRequests

【问题讨论】:

我也有同样的问题 - 你最近怎么样? 我决定子类化。您可以将所有通用逻辑粘贴在抽象类中,只需覆盖不同的字段和方法。我认为这是要走的路,否则我们将不得不与实体管理器进行一些令人讨厌的耦合。 【参考方案1】:

我会用继承和关系来实现,例如:

abstract class AbstractOrder 
 common fields


class SalesOrder extends AbstractOrder 



class WorkOrder extends AbstractOrder 


然后

class StockRequest 
   relationship pointing to AbstractOrder

当你 getOrder() return $this->order; Doctrine 可以返回 SalesOrder 或 WorkOrder 的 u 实例

【讨论】:

以上是关于创建一对多映射,其中许多可以是不同的对象类型的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate:如何映射与一组复杂对象的一对多关联?

mybatis xml数据层框架应用--Mybatis关系映射之一对多关系映射

06章 映射一对多双向关联关系以及cascadeinverse属性

JPA一对多映射

Ppthon基础学习之Dict

python数据字典的操作