2 Stimmen

OpenJPA: Superklassen-Eigenschaft für AttributeOverride nicht gefunden

Beim Versuch, eine geerbte Eigenschaft mit der Annotation AttributeOverride zuzuordnen, gibt OpenJPA einen Fehler aus, dass die Eigenschaft in der Superklasse nicht gefunden werden kann. Ich bin mir nicht sicher, wie ich diese Eigenschaft richtig zuordnen kann.

Fehler

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

Code

@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
)

2voto

Rick Punkte 3765

Ändern Sie die Zugriffsebene in Ihren Embeddables (Adresse und ExtendedAddress) von privat auf geschützt oder Standard.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X