Doctrine2:映射超类的OneToMany

时间:2012-10-29 15:03:29

标签: doctrine-orm relationship class-table-inheritance mappedsuperclass

我的数据库结构如下:

工作:

  • CTI工作
  • MappedSuperclass AbstractImageWork 扩展工作
  • 决赛桌 PhotoWork ,其中包含 AbstractImageWork

注释:

WorkComment 工作有一个ManyToOne关系:

@ManyToOne(targetEntity="Work", inversedBy="comments")

工作 WorkComment 有一个OneToMany关系:

@OneToMany(targetEntity="WorkComment", mappedBy="work")

问题是Doctrine在更新架构时给了我这个错误:

[Doctrine\ORM\Mapping\MappingException]
It is illegal to put an inverse side one-to-many or many-to-many association on
mapped superclass 'Acme\...\AbstractImageWork#comments'.

我想这与MappedSuperclass AbstractImageWork 工作 PhotoWork 之间的中间有关,但我实际上并没有把这个关系放在MappedSuperclass上,但是放在CTI表上..那么为什么Doctrine的行为会像这样呢?

有什么想法吗?

3 个答案:

答案 0 :(得分:15)

在某些情况下,如果从标记为@ORM\MappedSuperclass的类继承时出现此类错误,请尝试将属性访问级别从私有更改为受保护

答案 1 :(得分:1)

在其他情况下,发生在抽象高级类中声明@ORM\Entity而不是@ORM\MappedSuperclass

答案 2 :(得分:0)

映射的超类不能是实体,它不能查询,并且映射的超类定义的持久性关系必须是单向的(仅具有拥有方)。 这意味着在映射的超类上根本不可能存在一对多关联。此外,仅当映射的超类目前仅在一个实体中使用时,才可能进行多对多关联。为了进一步支持继承,必须使用单个或联合表继承功能。

在此处查看:https://www.doctrine-project.org/projects/doctrine-orm/en/2.7/reference/inheritance-mapping.html