重写没有数据库字段映射的实体中的嵌入式XML属性



我有以下可嵌入类。

电子邮件:

@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不会尝试映射字段类型,也不会抱怨名称重复。

相关内容

  • 没有找到相关文章

最新更新