2013-07-18 1 views
0

다음과 같은 포함 가능한 클래스가 있습니다.데이터베이스 필드 매핑이없는 엔터티의 포함 된 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 embed와 함께 기재하고 싶습니다.

답변

0

데이터베이스에 매핑되지 않은 모든 필드는 @Transient으로 주석 처리되어야합니다. 이 경우, Hibernate는 필드 타입을 매핑하지 않고 중복 된 이름에 대해 불평하지 않을 것이다.

+0

Transient와 관계없이 'type'은 두 번 포함됩니다. 나는 단지 주체에서 그 이름을 오버라이드 (override) 할 방법을 찾아야한다. –

+0

"Embeds 모두에 타입 필드가 있지만 그 필드는 어떤 데이터베이스 필드에도 매핑되어 있지 않습니다"Hibernate는 모든 필드 (@Transient로 주석 된 필드 제외)를 매핑하려고하고 타입 필드에 불만을 표시합니다. 마지막으로 필드 유형을 계속 유지 하시겠습니까? – willome

+0

해당 필드를 유지하지 않으려합니다. –