因此,我不确定如何问这个问题,因为似乎很容易找到这个问题的答案。
我有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() // ... }
这应该够了吧。