所以,我不知道怎么问这个问题,因为它似乎像它应该很容易找到这个问题的答案之一。

我有3个表; ContentHeader,ContentType1和ContentType2。 ContentHeader有小学,自动递增键。 ContentType1和ContentType2既保持外键ContentHeader的主键。这些外键也可用于它们各自的表中的主键。

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;

我已经创建四类:

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

此抛出试图生成架构时空指针。我敢肯定,我只是失去了一些东西简单。我注意到PrimaryKeyJoinColumn,但我不知道这是否是我需要什么或没有。

有帮助吗?

解决方案

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

这应该可以解决问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top