具有抽象基类的学说继承映射



我有一个关于教义映射策略的问题。

有两种不同的方法可以实现继承:映射超类或继承映射。我正在尝试做的是以下内容:

/** 
 * @ORMEntity
 * @ORMInheritanceType("SINGLE_TABLE")  
 * @ORMDiscriminatorColumn(name="type", type="string")
 * @ORMDiscriminatorMap({"B" = "B","C" = "C"})
 * @ORMHasLifecycleCallbacks
 */
abstract class A {
    OneToManyMappingToD
}
/** 
 * @ORMEntity
 */
class B {
}
/** 
 * @ORMEntity
 */
class C {
}
/** 
 * @ORMEntity
 * @ORMInheritanceType("SINGLE_TABLE")  
 * @ORMDiscriminatorColumn(name="type", type="string")
 * @ORMDiscriminatorMap({"E" = "E","F" = "F"})
 * @ORMHasLifecycleCallbacks
 */
abstract class D {
    ManyToOneToA
}
/** 
 * @ORMEntity
 */
class E {
}
/** 
 * @ORMEntity
 */
class F {
}
映射

验证没有注意到任何问题,映射文件正常。但是当我以 -> submit() 的形式使用这些实体时,我必须等待大约 30 秒,Doctrine 执行了 8 000 多次调用。所以我认为我的映射有问题。

我不能使用任何 MappedSuperClasses,因为我绝对需要 oneToMany Relations。我认为问题是,A类和D类不是鉴别器映射的一部分,并且该学说无法正确映射关系。但是A和D并不是一个常规的实体,因为它们只是提供基本属性。

我怎样才能在不获得超过8 000个精选教义呼吁的情况下实现这一目标?

谢谢!

根据我的经验,使用类表继承适用于这种类型的关联。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html#class-table-inheritance

文档指出使用此策略会影响性能,但我不敢相信它会生成 8000 个 SELECT 查询。

相关内容

  • 没有找到相关文章

最新更新