OpenJPA: свойство суперкласса не найдено для AttributeOverride - PullRequest
2 голосов
/ 04 августа 2011

При попытке отобразить унаследованное свойство с помощью аннотации AttributeOverride OpenJPA выдает ошибку, что не может найти свойство в суперклассе.Я не уверен, как правильно отобразить это.

Ошибка

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", 
                 column=@Column(name="mailingAddressLine")),
            @AttributeOverride(name="additionalAddressLine", 
                  column=@Column(name="mailingAddressLine2")),
            @AttributeOverride(name="city", 
                  column=@Column(name="mailingAddressCity")),
            @AttributeOverride(name="state", 
                  column=@Column(name="mailingAddressState")),
            @AttributeOverride(name="zip", 
                  column=@Column(name="mailingAddressZip")),
    })
    private ExtendedAddress mailingAddress;

    @Embedded
    @AttributeOverrides(value={
            @AttributeOverride(name="addressLine", 
                 column=@Column(name="billingAddressLine")),
            @AttributeOverride(name="city", 
                  column=@Column(name="billingAddressCity")),
            @AttributeOverride(name="state", 
                  column=@Column(name="billingAddressState")),
            @AttributeOverride(name="zip", 
                  column=@Column(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
)

1 Ответ

2 голосов
/ 04 августа 2011

Изменение уровня доступа в ваших Embeddables (Address и ExtendedAddress) с частного на защищенный или по умолчанию

...