Doctrine @新条令2.3中的关联超越和@AttributeOverride

Doctrine @新条令2.3中的关联超越和@AttributeOverride,doctrine,doctrine-orm,Doctrine,Doctrine Orm,根据标题,新注释@AssociationOverride和@AttributeOverride的目的是什么 我在Doctrine网站上唯一能找到的是: @AssociationOverride和@AttributeOverride(对特征和属性有用 映射(超类) 通过查看中的代码,我们可以看到它用于重写已在映射的超类/特征中定义的字段映射 提交中包含的测试演示了这种行为: 映射超类 /** *@MappedSuperclass */ 类用户 { /** *@Id *@GeneratedValue

根据标题,新注释
@AssociationOverride
@AttributeOverride
的目的是什么

我在Doctrine网站上唯一能找到的是:

@AssociationOverride和@AttributeOverride(对特征和属性有用 映射(超类)


通过查看中的代码,我们可以看到它用于重写已在映射的超类/特征中定义的字段映射

提交中包含的测试演示了这种行为:

映射超类
/**
*@MappedSuperclass
*/
类用户
{
/**
*@Id
*@GeneratedValue
*@Column(type=“integer”,name=“user\u id”,长度=150)
*/
受保护的$id;
/**
*@Column(name=“user_name”,nullable=true,unique=false,length=250)
*/
受保护的$名称;
/**
*@var数组集合
*
*@ManyToMany(targetEntity=“Group”,inversedBy=“users”,cascade={“persist”,“merge”,“detach”})
*@JoinTable(name=“users\u groups”,
*joinColumns={@JoinColumn(name=“user\u id”,referencedColumnName=“id”)},
*inverseJoinColumns={@JoinColumn(name=“group\u id”,referencedColumnName=“id”)}
* )
*/
受保护的群体;
/**
*@var地址
*
*@ManyToOne(targetEntity=“Address”,cascade={“persist”,“merge”})
*@JoinColumn(name=“address\u id”,referencedColumnName=“id”)
*/ 
受保护的$地址;
...
}
使用
@AssociationOverride
/*
*@实体
*@AssociationOverrides({
*@AssociationOverride(name=“groups”,
*joinTable=@joinTable(
*name=“users\u admingroups”,
*joinColumns=@JoinColumn(name=“adminuser\u id”),
*inverseJoinColumns=@JoinColumn(name=“admingroup\u id”)
*          )
*      ),
*@AssociationOverride(name=“address”,
*joinColumns=@JoinColumn(
*name=“adminaddress\u id”,referencedColumnName=“id”
*          )
*      )   
* })
*/
类管理员扩展用户
{
...
}
使用
@AttributeOverride
/**
*@实体
*@AttributeOverrides({
*@AttributeOverride(name=“id”,
*column=@column(
*name=“guest\u id”,
*type=“integer”,
*长度=140
*          )
*      ),
*@AttributeOverride(name=“name”,
*column=@column(
*name=“来宾姓名”,
*nullable=false,
*唯一=正确,
*长度=240
*          )
*      )   
* })
*/
类Guest扩展用户
{
...
}

也就是说,不能用映射超类的子类更改targetEntity?如果是的话,那么为什么我们需要这两个新的注释呢?我认为这不是为了改变targetEntity而设计的,而且无论如何也没有意义。需要更改targetEntity对我来说是一种代码味道,表明需要重新思考您的体系结构。相反,这允许您更改属性到不同于映射超类的数据库字段的映射(
guest\u id
vs
user\u id
adminaddress\u id
vs
address\u id
)。