0

我有以下可嵌入类。

电子邮件:

@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嵌入的家庭地址、公司地址等。

4

1 回答 1

1

所有未映射到数据库的字段都应使用@Transient. 在这种情况下,Hibernate 不会尝试映射字段类型,也不会抱怨名称重复。

于 2013-07-19T10:35:28.347 回答