我有以下可嵌入类。
电子邮件:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Email")
@Embeddable
public class Email {
@XmlElement(required = true, nillable = true, name = "etype")
private String type;
private String address;
private String source;
// getters and setters
}
地址:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MyAddress")
@Embeddable
public class MyAddress {
@XmlElement(required = true, nillable = true, name = "atype")
private String type;
private String zip;
// getters and setters
}
嵌入上述两者的实体。
@Entity
@Table(name = "PERSON")
public class MyPerson {
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "address", column = @Column(name = "E_ADDR")),
@AttributeOverride(name = "source", column = @Column(name = "E_SRC")) })
private Email email;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "zip", column = @Column(name = "ZIP")),
private MyAddress address;
}
两个嵌入中都有一个type
字段。但该字段没有映射到任何数据库字段。但我需要覆盖它。因为hibernate在运行时会抛出错误。(编译良好)。是否有方法覆盖type
或为嵌入的和非数据库映射的字段指定不同的名称?
注意:我正在寻找字段名称不变的解决方案。因为我不能简单地更改名称。
这也回答了我的另一个问题,再次嵌入相同的Embeddable覆盖所有属性。例如,我想用相同的MyAddress
嵌入包括家庭地址、企业地址等。
所有未映射到数据库的字段都应使用@Transient
进行注释。在这种情况下,Hibernate不会尝试映射字段类型,也不会抱怨名称重复。