@MappedSuperclass vs普通抽象类

时间:2014-02-20 21:26:39

标签: doctrine-orm

我为几个共享相同属性的实体创建了一个基类,我认为它是@MappedSuperclass的一个很好的用例:

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperclass
 */
abstract class Invoiceable
{
    /**
     * @ORM\ManyToOne(targetEntity="Invoice")
     * @ORM\JoinColumn(name="invoiceId", referencedColumnName="id")
     *
     * @var Invoice|null
     */
    protected $invoice = null;

    /**
     * @ORM\ManyToOne(targetEntity="CreditNote")
     * @ORM\JoinColumn(name="creditNoteId", referencedColumnName="id")
     *
     * @var CreditNote|null
     */
    protected $creditNote = null;
}

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

@MappedSuperclass超类的目的是什么,如果没有?

1 个答案:

答案 0 :(得分:0)

礼貌Marco Pivetta on the doctrine-user mailing list

  

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

     

我建议你尝试使用XML或YAML映射 - 你会看到它崩溃的原因。

     

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