다음과 같은 포함 가능한 클래스가 있습니다.데이터베이스 필드 매핑이없는 엔터티의 포함 된 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와 함께 기재하고 싶습니다.
Transient와 관계없이 'type'은 두 번 포함됩니다. 나는 단지 주체에서 그 이름을 오버라이드 (override) 할 방법을 찾아야한다. –
"Embeds 모두에 타입 필드가 있지만 그 필드는 어떤 데이터베이스 필드에도 매핑되어 있지 않습니다"Hibernate는 모든 필드 (@Transient로 주석 된 필드 제외)를 매핑하려고하고 타입 필드에 불만을 표시합니다. 마지막으로 필드 유형을 계속 유지 하시겠습니까? – willome
해당 필드를 유지하지 않으려합니다. –