Domanda

Quindi, io non sono sicuro di come questa domanda, in quanto sembra che dovrebbe essere abbastanza facile trovare la risposta a questa domanda.

Ho 3 tabelle; ContentHeader, ContentType1 e ContentType2. ContentHeader ha una chiave primaria, di incremento automatico. ContentType1 e ContentType2 entrambi mantengono le chiavi esterne alla chiave primaria di ContentHeader. Queste chiavi esterne sono anche le chiavi primarie per i loro rispettivi tavoli.

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;

ho creato quattro classi:

@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 {
  ...
}

Questo getta un puntatore nullo quando si cerca di generare lo schema. Sono abbastanza sicuro che io sono solo manca qualcosa di semplice. Ho notato che il PrimaryKeyJoinColumn, ma non sono sicuro se è quello che mi serve o no.

È stato utile?

Soluzione

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()
    // ...
}

Questo dovrebbe fare il trucco.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top