@MappedSuperclass vs 纯抽象类



我已经为共享相同属性的多个实体创建了一个基类,我认为这对于@MappedSuperclass来说是一个很好的用例:

use DoctrineORMMapping as ORM;
/**
 * @ORMMappedSuperclass
 */
abstract class Invoiceable
{
    /**
     * @ORMManyToOne(targetEntity="Invoice")
     * @ORMJoinColumn(name="invoiceId", referencedColumnName="id")
     *
     * @var Invoice|null
     */
    protected $invoice = null;
    /**
     * @ORMManyToOne(targetEntity="CreditNote")
     * @ORMJoinColumn(name="creditNoteId", referencedColumnName="id")
     *
     * @var CreditNote|null
     */
    protected $creditNote = null;
}

但是,令我惊讶的是,在删除@MappedSuperclass注释时,它仍然按预期工作。

那么@MappedSuperclass超类的目的是什么,如果它没有工作呢?

由 Marco Pivetta 在 doctrine-user 邮件列表中提供:

这实际上只是一个基于注释驱动程序工作方式的幸运案例 - 同意,这令人困惑。它之所以有效,是因为您的属性protected .

我建议您尝试使用XML或YAML映射进行相同的操作-您将看到它如何严重崩溃。

您仍应将其定义为映射的超类。

最新更新