5

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

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

@AssociationOverride 和 @AttributeOverride(对 Trait 和 MappedSuperclass 有用)

4

1 回答 1

5

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

提交中包含的测试证明了这种行为:

映射超类

/** 
 * @MappedSuperclass
 */
class User
{
    /**
     * @Id
     * @GeneratedValue
     * @Column(type="integer", name="user_id", length=150)
     */
    protected $id;

    /**
     * @Column(name="user_name", nullable=true, unique=false, length=250)   
     */
    protected $name;

    /**
     * @var ArrayCollection
     *
     * @ManyToMany(targetEntity="Group", inversedBy="users", cascade={"persist", "merge", "detach"})
     * @JoinTable(name="users_groups",
     *  joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
     *  inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
     * )
     */
    protected $groups;

    /**
     * @var Address
     *
     * @ManyToOne(targetEntity="Address", cascade={"persist", "merge"})
     * @JoinColumn(name="address_id", referencedColumnName="id")
     */ 
    protected $address;

    ...
}

子类使用@AssociationOverride

/*  
 * @Entity
 * @AssociationOverrides({
 *      @AssociationOverride(name="groups",
 *          joinTable=@JoinTable(
 *              name="users_admingroups",
 *              joinColumns=@JoinColumn(name="adminuser_id"),
 *              inverseJoinColumns=@JoinColumn(name="admingroup_id")
 *          )
 *      ),
 *      @AssociationOverride(name="address",
 *          joinColumns=@JoinColumn(
 *              name="adminaddress_id", referencedColumnName="id"
 *          )
 *      )   
 * })
 */
class Admin extends User
{
    ...
}

子类使用@AttributeOverride

/**
 * @Entity
 * @AttributeOverrides({
 *      @AttributeOverride(name="id",
 *          column=@Column(
 *              name     = "guest_id",
 *              type     = "integer",
 *              length   = 140
 *          )
 *      ),
 *      @AttributeOverride(name="name",
 *          column=@Column(
 *              name     = "guest_name",
 *              nullable = false,
 *              unique   = true,
 *              length   = 240
 *          )
 *      )   
 * })
 */
class Guest extends User
{
    ...
}
于 2012-09-22T13:44:31.820 回答