使用
使用
根据标题,新注释@AssociationOverride
和@AttributeOverride
的目的是什么?
我在教义网站上唯一能找到的是:
@AssociationOverride和@AttributeOverride(对特质和 映射超类)
通过查看提交中的代码,我们可以看到它用于覆盖映射的超类/特征中已经定义的字段映射。
提交中包含的测试演示了此行为:
映射的超类
/**
* @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
{
...
}