@AttributeOverrides由多个@AttributeOverride注释组成,每个@AttributeOverride表示属性的映射,它的定义如以下所示:
@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME)
public @interface AttributeOverride {
String name();
Column column();
}
在使用@AttributeOverride注释应注意以下几方面的问题:
l name属性表示嵌入式类中的属性名称。
l column属性表示,所嵌入的实体类中的列定义,其中@Column标记表示的意义请读者参阅5.2.2小节。
l 例如将tb_customer表中的customer_zip字段映射为Address中的属性zip。代码如下所示:
@AttributeOverride(name = "zip",
column = @Column(name = "customer_zip")
)
l 使用嵌入式类的好处是:多个实体中都可以共享一个嵌入式类,方便了对实体的操作。例如现在ContactEO也嵌入Address类,就很方便的映射为以下所示:
public class CustomerEO implements Serializable {
private Integer id;
private String name;
private String nickname;
……getter和setter方法省略
private Address address;
@Embedded
@AttributeOverrides( {
@AttributeOverride(name = "zip", column = @Column(name = "contact_zip")),
@AttributeOverride(name = "line1", column = @Column(name = "contact_line1")),
})
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}