2011-08-04 11 views
2

OpenOver는 AttributeOverride 주석을 사용하여 상속 된 속성을 매핑하려고 할 때 수퍼 클래스에서 속성을 찾을 수 없다는 오류를 발생시킵니다. 올바른 방법으로 매핑하는 방법을 잘 모르겠습니다.OpenJPA : AttributeOverride에 대해 수퍼 클래스 속성이 없습니다.

오류

Embedded property "Order.mailingAddress" declares a mapping override for "addressLine", but that is not a persistent property in the embedded type.

코드

@Embeddable 
public class Address{ 
    private String addressLine; 
    private String city; 
    private String state; 
    private String zip; 

    //getters and setters 
} 

@Embeddable 
public class ExtendedAddress extends Address{ 
    private String additionalAddressLine; 

    //getters and setters 
} 

@Entity 
public class Order { 
    @Id 
    private id; 

    @OneToOne 
    private Customer customer; 

    @Embedded 
    @AttributeOverrides(value={ 
      @AttributeOverride(name="addressLine", 
       [email protected](name="mailingAddressLine")), 
      @AttributeOverride(name="additionalAddressLine", 
        [email protected](name="mailingAddressLine2")), 
      @AttributeOverride(name="city", 
        [email protected](name="mailingAddressCity")), 
      @AttributeOverride(name="state", 
        [email protected](name="mailingAddressState")), 
      @AttributeOverride(name="zip", 
        [email protected](name="mailingAddressZip")), 
    }) 
    private ExtendedAddress mailingAddress; 

    @Embedded 
    @AttributeOverrides(value={ 
      @AttributeOverride(name="addressLine", 
       [email protected](name="billingAddressLine")), 
      @AttributeOverride(name="city", 
        [email protected](name="billingAddressCity")), 
      @AttributeOverride(name="state", 
        [email protected](name="billingAddressState")), 
      @AttributeOverride(name="zip", 
        [email protected](name="billingAddressZip")), 
    }) 
    private Address billingAddress; 

    //getters and setters 
    //hashcode 
    //equals 
} 

SQL

CREATE TABLE Orders (
    id INT PRIMARY KEY GENERATED ALWAYS, 
    mailingAddressLine VARCHAR(45) DEFAULT NULL, 
    mailingAddressLine2 VARCHAR(45) DEFAULT NULL, 
    mailingAddressCity VARCHAR(45) DEFAULT NULL, 
    mailingAddressState CHAR(2) DEFAULT NULL, 
    mailingAddressZip CHAR(9) DEFAULT NULL, 
    billingAddressLine VARCHAR(45) DEFAULT NULL, 
    billingAddressCity VARCHAR(45) DEFAULT NULL, 
    billingAddressState CHAR(2) DEFAULT NULL, 
    billingAddressZip CHAR(9) DEFAULT NULL 
) 

답변

2

변경하여 Embeddab의 액세스 수준 les (Address 및 ExtendedAddress)를 private에서 protected 또는 default로 변경합니다.

+0

정확합니다! 고마워요! –

관련 문제