Frage

Also, ich bin nicht sicher, wie diese Frage zu stellen, wie es scheint, wie es recht einfach sein sollte, die Antwort auf diese zu finden.

Ich habe 3 Tabellen; ContentHeader, ContentType1 und ContentType2. ContentHeader hat einen primären, Autoinkrement-Schlüssel. ContentType1 und ContentType2 halten beide Fremdschlüssel ContentHeader Primärschlüssel. Diese Fremdschlüssel sind auch die Primärschlüssel für die jeweiligen Tabellen.

CREATE TABLE contentHeader (contentID INT AUTO_INCREMENT PRIMARY KEY, ...) ENGINE=InnoDB;

CREATE TABLE contentType1 (contentID INT PRIMARY KEY, FOREIGN KEY (contentID) REFERENCES contentHeader (contentID), ...) ENGINE=InnoDB;

CREATE TABLE contentType2 (contentID INT PRIMARY KEY, FOREIGN KEY (contentID) REFERENCES contentHeader (contentID), ...) ENGINE=InnoDB;

Ich habe vier Klassen erstellt:

@Entity
public class ContentHeader {

  @Id
  @GeneratedValue
  protected int contentID;

  ...
}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Content {

  @Id
  @OneToOne
  protected ContentHeader contentHeader;

  ...
}

@Entity
public class ContentType1 extends Content {
  ...
}

@Entity
public class ContentType2 extends Content {
  ...
}

Dies wirft ein Nullzeiger, wenn sie versuchen, das Schema zu generieren. Ich bin mir ziemlich sicher, dass ich fehle nur etwas einfach. Ich bemerkte die PrimaryKeyJoinColumn, aber ich bin nicht sicher, ob es ist, was ich brauche oder nicht.

War es hilfreich?

Lösung

You can create a composite id class that only have the ContentHeader:

@Embeddable
public class ContentKey implements java.io.Serializable {

    @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
    @JoinColumn(name = "ID", updatable = true)
    private ContentHeader header;
    // ...
}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Content {

    @Id
    public ContentKey  getContentKeyId()
    // ...
}

Das sollte den Trick tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top