EntitySubClass1
,EntitySubClass2
和EntitySubClass3
都扩展了MappedSuperclassBase
。
MappedSuperclassBase
/** @MappedSuperclass */
class MappedSuperclassBase
{
/** @Column(type="integer") */
protected $mapped1;
/** @Column(type="string") */
protected $mapped2;
/**
* @OneToOne(targetEntity="MappedSuperclassRelated1")
* @JoinColumn(name="related1_id", referencedColumnName="id")
*/
protected $mappedRelated1;
// ... more fields and methods
}
EntitySubClass1
/** @Entity */
class EntitySubClass1 extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}
EntitySubClass2
/** @Entity */
class EntitySubClass2 extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}
EntitySubClass3
/** @Entity */
class EntitySubClass3 extends MappedSuperclassBase
{
/** @Id @Column(type="integer") */
private $id;
/** @Column(type="string") */
private $name;
// ... more fields and methods
}
SomeOtherClass
包含扩展MappedSuperclassBase
的三个对象之一的单个实例。此外,这三个对象的单个实例必须属于SomeOtherClass
的一个实例,并且只能属于一个(即不为零)。
要使用Doctrine实现此目的,我正在考虑执行以下操作:
/** @Entity */
class SomeOtherObject
{
// ...
/**
* One SomeOtherObject has One MappedSuperclassBase.
* @OneToOne(targetEntity="MappedSuperclassBase", mappedBy="someOtherObject")
*/
private $mappedSuperclassBase;
// ...
}
/** @MappedSuperclass */
class MappedSuperclassBase
{
// ...
/**
* One MappedSuperclassBase has One SomeOtherObject.
* @OneToOne(targetEntity="SomeOtherObject", inversedBy="mappedSuperclassBase")
* @JoinColumn(name="someOtherObject_id", referencedColumnName="id")
*/
private $someOtherObject;
// ...
}
该映射有效,并且能够生成架构,但是在创建SomeOtherClass
对象时,我得到了MappedSuperclassBase table does not exist
。
重新阅读documentation后,我看到映射的超类必须是单向的(仅具有拥有方)
映射的超类不能是实体,它不可查询,并且 映射超类定义的持久关系必须是 单向的(仅具有拥有方)。这意味着一对多 映射超类根本不可能建立关联。 此外,仅当已映射时,才可能有多对多关联 目前,仅在一个实体中使用超类。对于 继承的进一步支持,单表或联接表继承 功能必须使用。
好的,我知道我的尝试没有遵循文档。话虽如此,我应该如何执行上述要求?是否可以使用映射的超类,或者我是否需要将CTI与Abstractclassbase
一起使用,除了SomeOtherClass
的{{1}}之外什么都不包含,并且会受到其他联接的惩罚? >